gpt4 book ai didi

Java - 如何判断对象的类?

转载 作者:行者123 更新时间:2023-12-02 18:15:16 24 4
gpt4 key购买 nike

给定一个接受某个父类(super class)型作为参数的方法。在该方法中,有什么方法可以确定传递给它的对象的实际类吗? IE。如果实际传递了允许参数的子类型,有没有办法找出它是什么类型?如果这是不可能的,有人可以解释为什么不(从语言设计的角度来看)吗?谢谢

更新:只是为了确保我清楚

Context: MySubType extends MyType

void doSomething(MyType myType) {
//determine if myType is MyType OR one of its subclasses
//i.e. if MySubType is passed as a parameter, I know that it can be explicitly
//cast to a MySubType, but how can I ascertain that its this type
//considering that there could be many subclasses of MyType
}

由于方法签名将参数指定为 MyType,那么如何判断该对象实际上是否是 MyType 的子类型(以及哪一个子类型)。

最佳答案

如果您查看 Object 类的 javadoc,您会发现每个对象都支持 getClass()。这是对象的Class,您可以从那里开始。

如果对象是MyType,则getClass() == MyType.class'。如果该对象是父类(super class),则getClass() != MyType.class`。

只有这几种可能。如果参数的类型是 MyType,并且 MyType 是类而不是接口(interface),则该对象是 MyClass 或者它是子类型。如果它是子类型,则 getClass() 将返回子类型的 Class。您可以使用Class的API来探索它。

当然,您可以使用反射来探索类型层次结构。您可以向 MyType.class 询问其直接子类的列表,然后从那里递归,然后度过美好的时光。但你不需要这样做。

关于Java - 如何判断对象的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2777678/

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