我有以下变量:
Class a = int.class;
Class b = Integer.class;
是否可以动态比较它?这意味着我想获得第二个变量的原始tye并将其与第一个变量进行比较。
答案 0 :(得分:1)
无法从int.class
中获取Integer.class
,反之亦然。你必须手动进行比较。
Integer.class.isAssignableFrom(int.class)
并且其反转返回false
,因为它不考虑自动装箱(这是编译器生成的代码)Class#isPrimitive()
,对于int.class
(也是void.class
)返回true,但不对int[].class
,{例如{1}}。Integer.class
以及类似Integer.TYPE
,... 最明智的方法是使用库或编写涵盖所有案例的几行代码。只有8个(int.class
,boolean
,byte
,char
,short
,int
,long
,{{ 1}})原始类型(+ float
)。
答案 1 :(得分:0)
public class Types {
private Map<Class, Class> mapWrapper_Primitive;
public Types(){
this.mapWrapper_Primitive = new HashMap<>();
this.mapWrapper_Primitive.put(Boolean.class, boolean.class);
this.mapWrapper_Primitive.put(Byte.class, byte.class);
this.mapWrapper_Primitive.put(Character.class, char.class);
this.mapWrapper_Primitive.put(Double.class, double.class);
this.mapWrapper_Primitive.put(Float.class, float.class);
this.mapWrapper_Primitive.put(Integer.class, int.class);
this.mapWrapper_Primitive.put(Long.class, long.class);
this.mapWrapper_Primitive.put(Short.class, short.class);
this.mapWrapper_Primitive.put(Void.class, void.class);
}
public boolean areDerivedTypes(Class type1, Class type2){
// Checking object types
if(!type1.isPrimitive() && !type2.isPrimitive()){
return type1.equals(type2);
}
// Checking primitive types
Class typeA = toPrimitiveType(type1);
Class typeB = toPrimitiveType(type2);
return typeA.equals(typeB);
}
public Class toPrimitiveType(Class type){
Class value = this.mapWrapper_Primitive.get(type);
if(value != null){
return value;
}
return type;
}
}