lkm*_*lkm 2 java oop programming-languages
给定一个接受某个超类型作为参数的方法.在该方法中,有没有办法确定传递给它的对象的实际类?即如果实际传递了allowable参数的子类型,有没有办法找出它是哪种类型?如果这是不可能的,有人可以解释为什么不(从语言设计的角度来看)?谢谢
更新:只是为了确保我很清楚
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(以及哪一个)的子类型.
如果查看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一个直接子类的列表,并从那里递归,并有一个很好的时间.但你不需要.