当前位置: 首页 > 面试题库 >

如何获取值的类型(Java)

孙项禹
2023-03-14
问题内容

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

DynastyPQ (base class)
FirstPQ (inherited class)

并以这种方式创建对象…

DynastyPQ pq = new FirstPQ();

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

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

问题答案:

您有几种选择。

  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。您应该更深入地研究该模式,以了解它是否适​​合您的情况,因为这可能是一个过大的选择。这不需要强制转换。



 类似资料:
  • 我正在与Avro合作,我有一个通用记录。我想从中提取clientId、deviceName、holder。在Avro模式中,

  • 问题内容: 通常,我见过人们像这样使用类文字: 但是,如果类型是通用类型,例如List,该怎么办?这可以正常工作,但由于应将List参数化,因此发出警告: 那么为什么不添加一个<?>呢?好吧,这会导致类型不匹配错误: 我想像这样的事情会起作用,但这只是一个普通的语法错误: 如何获得Class >静态信息,例如使用类文字? 我可以使用,以摆脱在第一个例子中所造成的非参数使用列表,警告的,但我宁愿不要

  • 返回值的原生类型。 返回值小写的构造函数名称,如果值为 undefined 或 null ,则返回 "undefined" 或 "null"。 const getType = v => v === undefined ? 'undefined' : v === null ? 'null' : v.constructor.name.toLowerCase(); getType(new Set(

  • 考虑下面的代码: 使用用于注释处理的最新JDK8 API,如何访问注释列表(@JSON,@freezed) 我尝试过很多技巧,比如

  • 问题内容: 我使用PDO和MySQL,出于某种原因,当从数据库中获取int类型的值时,PDOStatement返回的是数字的字符串表示形式,而不是数字类型的值。如何防止这种情况发生? 我注意到有一个PDO类的属性:应该可以解决这个问题,但是在尝试修改它时,它抛出一个错误,指出该属性对MySQL驱动程序无效。 查询数据库时,获取字符串而不是数字是否正常? 问题答案: 我不认为可以在PHP 5.2中完

  • 问题:我想知道是否可以从DocumentFilter获取JTextfield类型 我读过java文档,搜索了很多,但没有找到任何信息。 需要:我在两个JTextfields上设置了相同的DocumentFilter。当事件发生时,在DocumentFilter的“replace”方法中,我想知道哪个textfield导致了事件。 用例:我有大约15个文本字段(未来可能会增加),我希望对所有这些字段