如何获取值的类型(Java)

时间:2015-12-25 23:25:43

标签: java casting

我在网上看到的解决方案很有意义;如果您知道变量的类型,那么您就知道它的值的类型。 Java就是这样做的;但是,如果我有一个继承类的系统,比如这个......

DynastyPQ (base class)
FirstPQ (inherited class)

以这种方式创建对象......

DynastyPQ pq = new FirstPQ();

有没有办法获得FirstPQ的类型,以便我可以在演员表中使用它,以便我可以访问该类的独占方法?也许类似于这个?

(typeof(pq's value)pq).exclusiveMethod()

3 个答案:

答案 0 :(得分:1)

您有几个选择。

  1. 您可以使用反射
  2. 您可以使用instanceof
  3. 您可以使用访客模式
  4. 对于这些示例,我们将尝试查找此变量的类型:

    Object obj = new TargetType();
    

    我们希望查看obj引用的对象是否为TargetType类型。

    <强>反射

    有几种方法可以做到这一点:

    if(obj == TargetType.class) {
        //do something
    }
    

    上面代码背后的想法是getClass()返回对用于实例化该对象的Class对象的引用。您可以比较参考。

    if(TargetType.class.isInstance(obj)) {
        //do something
    }
    

    Class#isInstance检查传递给method的对象值是否是我们调用isInstance的类的实例。如果false为null,它将返回obj,因此不需要进行空检查。这需要强制转换才能对对象执行操作。

    <强>的instanceof

    这个很简单:

    if(obj instanceof TargetType) {
        //do something
    }
    

    instanceof是语言规范的一部分。如果false为空,则返回obj。这需要强制转换才能对对象执行操作。

    访客模式

    我在other answers之一中详细解释了这一点。您将负责处理null。您应该深入了解模式,看它是否适合您的情况,因为它可能是一种矫枉过正。这不需要铸造。

答案 1 :(得分:1)

尝试使用getClass()方法。 这将返回特定对象的运行时类。 http://www.tutorialspoint.com/java/lang/object_getclass.htm

答案 2 :(得分:0)

有几个选择:

  1. 使用instanceof运算符:

    • if (pq instanceof FirstPQ) {((FirstPQ)pq).exclusiveMethod();}
  2. 使用Class.isInstance(Object obj) 实例方法:

    • FirstPQ firstPQ; if(pq.getClass().isInstance(firstPQ)) { firstPQ = (FirstPQ)pq; }
      (注意:尚未测试。 已确认。
  3. 使用访客模式: