Java - 如何告诉对象的类?

lkm*_*lkm 2 java oop programming-languages

给定一个接受某个超类型作为参数的方法.在该方法中,有没有办法确定传递给它的对象的实际类?即如果实际传递了al​​lowable参数的子类型,有没有办法找出它是哪种类型?如果这是不可能的,有人可以解释为什么不(从语言设计的角度来看)?谢谢

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

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
}
Run Code Online (Sandbox Code Playgroud)

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

bma*_*ies 5

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

如果对象是MyType那么getClass() == MyType.class'. If the object is a superclass, then的getClass()!= MyType.class`.

只有这些可能性.如果param的类型是MyType,并且MyType是一个类而不是一个接口,则该对象是MyClass或者它是一个子类型.如果它是子类型,则getClass()返回Class子类型.您可以使用API Class来探索它.

当然,您可以使用反射来探索类型层次结构.你可以要求MyType.class一个直接子类的列表,并从那里递归,并有一个很好的时间.但你不需要.