以下代碼是否有效?檢查班級類型(.class)是否等於其他班級類型
void myMethod (Class classType) {
if (classType == MyClass.class) {
// do something
}
}
myMethod (OtherClass.class);
如果不是有沒有其他辦法,我可以檢查是否通過。類(類類型)是類型 - MyClass的?
Thanx!
以下代碼是否有效?檢查班級類型(.class)是否等於其他班級類型
void myMethod (Class classType) {
if (classType == MyClass.class) {
// do something
}
}
myMethod (OtherClass.class);
如果不是有沒有其他辦法,我可以檢查是否通過。類(類類型)是類型 - MyClass的?
Thanx!
是的,該代碼是有效的 - 如果這兩個類已被加載相同的類加載器。如果您希望這兩個類被視爲相同,即使它們已被不同加載類加載器(可能來自不同位置)基於完全限定名稱,那麼只需比較完全限定名稱即可。
請注意,您的代碼只考慮一個精確比賽,但是 - 它不會提供一種「分配兼容性」的是(比方說)instanceof
看到一個值是否是指一個對象,它是實例時不一個給定的班級。爲此,您需要查看Class.isAssignableFrom
。
我寧願比較規範名稱是完全確定的,classType.getCanonicalName()。equals(MyClass.class.getCanonicalName())。
請注意,這可能會導致匿名和內部類的問題,如果您正在使用它們,您可能會考慮使用getName。
這對我來說
public class Test
{
void myMethod (Class classType) {
System.out.println(classType.isAssignableFrom(Test.class));
}
public static void main(String[] args) {
Test t = new Test();
t.myMethod(String.class);
}
}
我認爲你正在尋找instanceof
工作。
Animal a = new Tiger();
System.out.println(a instanceof Tiger); // true
System.out.println(a instanceof Animal); //true
另外,您可以比較兩個班,
a.getClass() == b.getClass()
'instanceof'也爲子類返回'true',這可能不是OP想要的 – user11153 2015-03-17 12:36:20
問題是關於比較實際的類,而不是比較對象。 – 2016-05-30 18:10:31
不要使用 classType.getCanonicalName().equals(MyClass.class.getCanonicalName())
上面不會考慮任何泛型(所有地圖都一樣,所有設置都一樣等)
如果答案不符合您的要求Fahim,請不要忘記接受答案或評論。喬恩的答案是無可挑剔的(像往常一樣)。 – 2012-07-15 23:03:31