public ClassHolderType getClassHolderType() {
		if (rawClass == null) {
			// rawClass == null in the generic case such as T variable;
			return SINGLE;
		}
		else if (Collection.class.isAssignableFrom(rawClass)) {
			if (typeParams.size() > 0) {
				ClassHolderType innerType = typeParams.get(0).getClassHolderType();
				return innerType == COLLECTION ? MULTI_COLLECTION :
					   innerType == MULTI_COLLECTION ? MULTI_COLLECTION : COLLECTION;
			}
			return COLLECTION;
		}
		else if (Map.class.isAssignableFrom(rawClass)) {
			if (typeParams.size() > 1) {
				ClassHolderType innerType = typeParams.get(1).getClassHolderType();
				return innerType == COLLECTION ? MULTI_MAP :
					   innerType == MULTI_COLLECTION ? MULTI_MAP: MAP;
			}
			return MAP;
		}
		else{
			return SINGLE;
		}
	}