我有一个基类用于所有活动(ActivityBase
),该基类本身派生自android.app.Activity
。在onCreate中,我想根据当前执行的子类执行一些条件逻辑。如果SomeCustomActivity
和AnotherCustomActivity
都扩展了ActivityBase
,那么父类(ActivityBase
)如何确定当前正在执行哪个子类?
我有一个基类用于所有活动(ActivityBase
),该基类本身派生自android.app.Activity
。在onCreate中,我想根据当前执行的子类执行一些条件逻辑。如果SomeCustomActivity
和AnotherCustomActivity
都扩展了ActivityBase
,那么父类(ActivityBase
)如何确定当前正在执行哪个子类?
在某些情况下,仅在父类中添加此行代码即可解决问题。它返回“子”类的名称(而不是父类):
this.getClass().getName() //String like "com.mycompany.myclassname"
this.getClass().getSimpleName() //String like "myclassname"
更多讨论请查看这里:http://www.coderanch.com/t/324715/java/java/Getting-child-class-name-parent
使用 instanceof 操作符。
假设你有一个基类和两个子类分别命名为 Base
、SubOne
和 SubTwo
,如果你想检查一个变量 ref
是不是 SubOne
或 SubTwo
的实例,你可以这么说:
if(ref instanceof SubOne){
}
else if(ref instanceof SubTwo){
}
请注意:(ref instanceof Base)
虽然是这样,但始终会返回 true
。
不要使用if语句,而应该为您的条件逻辑创建一个抽象方法。 然后让子类运行适合它的代码。
这也将使您免于每次创建新子类时修改基类的麻烦。
我认为您想要使用 instanceof 运算符,例如:
if(this instanceof SomeCustomActivity) {
// do stuff
} else if (this instanceof AnotherCustomActivity) {
// do other stuff
}
if(parent.getClass().equals(childObj.class)){
//to do ..
}
abstract class A {
abstract boolean isItX();
void doX() { ... }
void doY() { ... }
void process() {
if (isItX()) {
doX();
} else {
doY();
}
}
}
class B extends A {
boolean isItX() {
return true;
}
}
class C extends A {
boolean isItX() {
return false;
}
}
欲了解更多信息,请参见好莱坞原则。
this
是否是特定子类的实例。 - Stephen C