如果我有方法签名
public void myMethod(SuperClass s){
}
Run Code Online (Sandbox Code Playgroud)
并且SuperClass有三个子类,有什么方法myMethod可以获得传入的子类的类名?
不确定它是否重要,但SuperClass是抽象的.
myMethod中是否有任何方法可以获取传入的子类的类名?
是的,通过使用getClass方法:
public void myMethod(SuperClass s){
System.out.println(s.getClass());
}
Run Code Online (Sandbox Code Playgroud)
备注1:
然而,这听起来像是Bad Design™.
无论你想做什么,都要myMethod考虑为它SuperClass提供一个方法(提供一个有意义的默认实现,或者使它抽象以强制子类来实现该方法)并s在你的方法中调用这个方法:
public void myMethod(SuperClass s){
s.abstractMethod();
}
Run Code Online (Sandbox Code Playgroud)
备注2:
如果myMethods逻辑似乎与目的无关,SuperClass并且您不希望将myMethod代码放在此类中,请考虑实现访问者模式.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |