以下代码是否有效?
void myMethod (Class classType) {
if (classType == MyClass.class) {
// do something
}
}
myMethod (OtherClass.class);
如果没有,我可以检查传递的.class(Class Type)类型是否为MyClass?
感谢名单!
答案 0 :(得分:47)
是的,该代码有效 - 如果这两个类已由同一个类加载器加载。如果你希望这两个类被视为相等,即使它们已被不同的类加载器加载,可能来自不同的位置,基于完全限定的名称,那么只需比较完全限定的名称
请注意,您的代码仅考虑完全匹配,但是 - 它不会提供(例如)instanceof
在查看值是否参考时所做的“赋值兼容性”到一个对象,它是给定类的一个实例。为此,您需要查看Class.isAssignableFrom
。
答案 1 :(得分:4)
我宁愿比较规范名称是完全确定的,classType.getCanonicalName()。equals(MyClass.class.getCanonicalName())。
请注意,这可能会给匿名和内部类带来问题,如果您使用它们,可以考虑使用getName。
答案 2 :(得分:2)
这对我有用
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 );
}
}
答案 3 :(得分:0)
我认为您正在寻找instanceof
。
Animal a = new Tiger();
System.out.println(a instanceof Tiger); // true
System.out.println(a instanceof Animal); //true
或者你可以用
比较两个类a.getClass() == b.getClass()
答案 4 :(得分:0)
不要使用
public Observable<Response> getBrands() {
return new Observable<Response>() {
@Override
protected void subscribeActual(Observer<? super Response> observer) {
RequestHelper.GetRequest("getbrands");
}
};
}
public void GetBrands(){
getBrands().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Response>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Response value) {
Log.w("Reactive",value.toString());
Toast.makeText(getActivity(),"Yaaaaay request 5alas",Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable e) {
Log.w("response brands= "+e.toString(),"MyTAG");
}
@Override
public void onComplete() {
}
});
}
以上不会考虑任何泛型(所有地图都相同,所有设置都相同等)