如果类B和类C扩展了类A,我有一个类型为B或C的对象,我如何确定它是哪种类型的实例?
当前回答
在“Class”类上还有一个. isinstance方法。如果你通过myBanana. getclass()获得一个对象的类,你可以看到你的对象myApple是否与myBanana via是同一个类的实例
myBanana.getClass().isInstance(myApple)
其他回答
你可以使用:
Object instance = new SomeClass();
instance.getClass().getName(); //will return the name (as String) (== "SomeClass")
instance.getClass(); //will return the SomeClass' Class object
HTH。但我认为大多数时候,将其用于控制流或类似的东西并不是一个好的实践……
使用Object.getClass。它返回对象的运行时类型。下面是如何使用你的例子来调用它:
class A {}
class B extends A {}
class C extends A {}
class Main {
public static void main(String args[]) {
C c = new C();
Class clazz = c.getClass();
System.out.println(clazz);
}
}
输出:
class C
您还可以比较两个Class实例,以确定两个对象是否属于同一类型。
class A {}
class B extends A {}
class C extends A {}
class Main {
public static void main(String args[]) {
B b = new B();
Class c1 = b.getClass();
C c = new C();
Class c2 = c.getClass();
System.out.println(c1 == c2);
}
}
任何建议的方法的使用都被认为是基于糟糕的OO设计的代码气味。
如果您的设计很好,您应该不会发现自己需要使用getClass()或instanceof。
任何建议的方法都可以,但只是在设计方面要记住一些东西。
your_instance.getClass().getSimpleName()将给出类型名称,例如:字符串,Integer, Double, Boolean…
如果你想在运行时知道,用isinstance()检查是不够的。 使用:
if(someObject.getClass().equals(C.class){
// do something
}
推荐文章
- Java中的@UniqueConstraint注释
- 如何在清洁模式下运行eclipse ?如果我们这样做会发生什么?
- 获取java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory异常
- Java中的正则表达式命名组
- c#和Java的主要区别是什么?
- 什么是NullPointerException,我如何修复它?
- 在Java中使用“final”修饰符
- 无法在Flutter上找到捆绑的Java版本
- 如何在Kotlin解析JSON ?
- 如何在新的材质主题中改变背面箭头的颜色?
- 如何设置OkHttp连接超时
- 用于桌面应用程序的Swing vs JavaFx
- 为什么这个Java程序会终止,尽管它显然不应该(也没有)终止?
- 使用split("|")按管道符号拆分Java字符串
- 当内存不足导致抛出OutOfMemoryError时会发生什么?