如何获取值的类型(Java)

问题描述

您有几种选择。

  1. 您可以使用反射
  2. 你可以用 instanceof
  3. 您可以使用访客模式

对于这些示例,我们将尝试查找此变量的类型:

Object obj = new TargetType();

我们想看看被引用的对象obj是否为type TargetType


您可以通过以下几种方法执行此操作:

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

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

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

Class#isInstance检查传递给方法的对象值是否是我们正在调用的类的实例isInstancefalse如果为objnull,它将返回,因此不需要进行null检查。这需要强制转换以对对象执行操作。


这很简单:

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

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


我已经在其他答案之一中对此进行了详细说明。您将负责处理null。您应该更深入地研究该模式,以了解它是否适​​合您的情况,因为这可能是一个过大的选择。这不需要强制转换。

解决方法

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

DynastyPQ (base class)
FirstPQ (inherited class)

并以这种方式创建对象…

DynastyPQ pq = new FirstPQ();

有没有一种方法可以获取FirstPQ 的 类型 ,以便可以在强制转换中使用它,以便可以访问类的独占方法?也许与此类似?

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

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”