在Java中,可以使用反射来检查一个泛型参数是否是确定类型。具体步骤如下:
getClass()
方法获取泛型参数的Class对象。instanceof
关键字判断泛型参数是否是ParameterizedType
的实例。getActualTypeArguments()
方法获取实际类型参数的数组。instanceof
关键字判断每个实际类型参数是否是确定类型。以下是一个示例代码:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
public class GenericTypeCheck {
public static void main(String[] args) {
HashMap<Integer, ArrayList<?>> map = new HashMap<>();
boolean isGenericType = checkGenericType(map);
System.out.println("Is generic type: " + isGenericType);
}
public static boolean checkGenericType(HashMap<Integer, ArrayList<?>> map) {
Type type = map.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
for (Type argument : actualTypeArguments) {
if (argument instanceof Class) {
// 判断实际类型参数是否是确定类型
Class<?> clazz = (Class<?>) argument;
System.out.println("Actual type argument: " + clazz.getName());
} else {
// 实际类型参数不是确定类型
return false;
}
}
return true;
}
return false;
}
}
上述代码中,我们定义了一个checkGenericType()
方法来检查泛型参数是否是确定类型。在main()
方法中,我们创建了一个HashMap<Integer, ArrayList<?>>
对象,并调用checkGenericType()
方法进行检查。如果泛型参数是确定类型,将输出实际类型参数的类名;否则,将返回false
。
请注意,以上代码仅适用于检查泛型参数是否是确定类型,并不涉及腾讯云相关产品。如需了解腾讯云的相关产品和服务,请参考腾讯云官方文档或咨询腾讯云官方客服。
领取专属 10元无门槛券
手把手带您无忧上云