如果我有一个方法签名
public void myMethod(SuperClass s){
}
和SuperClass
有3个子类,在myMethod
中有什么办法可以得到传入的子类的类名吗?
不确定它是否重要,但 SuperClass 是抽象的。
最佳答案
is there any way within myMethod I can get the class name of the subclass which was passed in?
是的,通过使用 getClass
method :
public void myMethod(SuperClass s){
System.out.println(s.getClass());
}
备注1:
然而,这对我来说确实像是一个 Bad Design™。
无论您想在 myMethod
中做什么,请考虑在 SuperClass
中为它提供一个方法(提供一个有意义的默认实现,或者使其抽象以强制子类实现该方法) 并在您的方法中对 s
调用此方法:
public void myMethod(SuperClass s){
s.abstractMethod();
}
备注2:
如果 myMethod
的逻辑看似与 SuperClass
的用途无关,并且您不想将 myMethod
代码放入其中类,考虑实现 visitor pattern相反。
关于java - 当一个对象作为类型父类(super class)传入时,有没有一种方法可以检索子类的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6967539/