gpt4 book ai didi

java - 如何获取值的类型(Java)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:36 25 4
gpt4 key购买 nike

我在网上看到的解决方案很有意义;如果你知道变量的类型,那么你就知道它的值的类型。 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 引用的对象是否属于TargetType 类型。


反射

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

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

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

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

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


实例

这个很简单:

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

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


访问者模式

我已经在我的 other answers 中详细解释了这一点.您将负责处理 null。您应该更深入地研究该模式,看看它是否适合您的情况,因为它可能有点矫枉过正。这不需要类型转换。

关于java - 如何获取值的类型(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com