【问题标题】:How to get the type of the class for comparison如何获取类的类型进行比较
【发布时间】:2010-03-11 19:27:29
【问题描述】:

我有这个对象,它是超类的一个实例。我想知道该对象到底是哪个子类,以便我可以决定如何处理它。有这个 getClass() 方法,但它显然不用于比较问题。如何获取对象的子类型?

【问题讨论】:

  • 对象不能是子类。对象可以是类的实例。

标签: java superclass gettype


【解决方案1】:

如果您尝试这样做,则可能存在设计缺陷,但instanceof

public class MainClass {
  public static void main(String[] a) {

    String s = "Hello";
    if (s instanceof java.lang.String) {
      System.out.println("is a String");
    }
  }

}

Beware of instanceof operator

【讨论】:

  • 是的,这可能是一个设计缺陷 :) 但我不知道,似乎没有其他方法可以做到这一点。
  • 嗯。那么,这如何适用于 MVC?我的意思是,我的模型不知道视图,所以我不能使用多态性在视图中创建适当的组件。那我该怎么做呢?
  • 我必须查看代码才能知道您的意思。您可能滥用继承。记住要优先考虑组合而不是继承。
  • 也许我可以这样解释:模型有坐标和绘图信息,视图将创建组件,然后模型将在组件内部绘制。但是我不能有一种类型的组件,我需要 JPanel、JTextArea.. 取决于模型元素类型。我无法在模型中决定这一点,因为它将是模型中的 GUI。而视图只能由模型元素的类型决定。希望这是有道理的,但我必须同意它有点混乱。
  • 我认为您的组件确实应该是您的视图。看看这个很好的概述:java.sun.com/developer/onlineTraining/GUI/Swing2/…
【解决方案2】:

Class c = (你的超类名).getClass();

if(c.getName == "你的子类名") 采取行动

【讨论】:

  • 谢谢,我试过了,它给出了包的名称,例如 package.subclass
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2023-03-16
  • 2015-02-10
  • 2021-11-08
相关资源
最近更新 更多