java - 当一个对象作为类型父类(super class)传入时,有没有一种方法可以检索子类的类型?

标签 java oop

如果我有一个方法签名

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/

相关文章:

java - windows下socket读取超时: strange hardcode in native method

language-agnostic - "Objects communicate with each other by passing messages"到底是怎么回事?

javascript - 获取类的函数(方法)

php - 使用 foreach 获取时覆盖 PDO 的 fetch()

java - 根据字符串标识符检查对象字段

java - InfiniteProgressDemo 的问题

java - 键入时将编辑文本中的每个单词大写

java - SwingUtilities InvokeLater-什么被认为是不好的做法?

java - 如何在 Java 中正确修剪字符串中的空格?

java - 两个 OO 问题 reg 构造函数