如果类B和类C扩展了类A,我有一个类型为B或C的对象,我如何确定它是哪种类型的实例?
当前回答
您可以使用getSimpleName()。
假设我们有一个对象:Dog d = new Dog(),
我们可以使用下面的语句来获取类名:Dog。例如:
.getSimpleName d.getClass () ();//返回String 'Dog'。
PS: d.g getclass()会给你对象的全名。
其他回答
如果你想在运行时知道,用isinstance()检查是不够的。 使用:
if(someObject.getClass().equals(C.class){
// do something
}
在“Class”类上还有一个. isinstance方法。如果你通过myBanana. getclass()获得一个对象的类,你可以看到你的对象myApple是否与myBanana via是同一个类的实例
myBanana.getClass().isInstance(myApple)
使用instanceof操作符查找对象是否属于特定类。
booleanValue = (object instanceof class)
JDK 14扩展了instanceof操作符:你可以指定一个绑定 变量;如果instanceof操作符的结果为真,则 被测试的对象被分配给绑定变量。
请访问官方Java文档以获得更多参考。
说明instanceof操作符用法的示例程序:
import java.util.*;
class Foo{
@Override
public String toString(){
return "Bar";
}
}
class Bar{
public Object reference;
@Override
public String toString(){
return "Foo";
}
}
public class InstanceofUsage{
public static void main(final String ... $){
final List<Object> list = new ArrayList<>();
var out = System.out;
list.add(new String("Foo Loves Bar"));
list.add(33.3);
list.add(404_404);
list.add(new Foo());
list.add(new Bar());
for(final var o : list){
if(o instanceof Bar b && b.reference == null){
out.println("Bar : Null");
}
if(o instanceof String s){
out.println("String : "+s);
}
if(o instanceof Foo f){
out.println("Foo : "+f);
}
}
}
}
输出:
$ javac InstanceofUsage.java && java InstanceofUsage
String : Foo Loves Bar
Foo : Bar
Bar : Null
我在我的GeneralUtils类中使用blow函数,检查它可能有用
public String getFieldType(Object o) {
if (o == null) {
return "Unable to identify the class name";
}
return o.getClass().getName();
}
使用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);
}
}
推荐文章
- Intellij IDEA Java类在保存时不能自动编译
- 何时使用Mockito.verify()?
- 在maven中安装mvn到底做什么
- 不可变与不可修改的集合
- 如何在JSON中使用杰克逊更改字段名
- GSON -日期格式
- 如何从线程捕获异常
- 无法解析主机"<URL here>"没有与主机名关联的地址
- 如何在Java中打印二叉树图?
- String.format()在Java中格式化双重格式
- com.jcraft.jsch.JSchException: UnknownHostKey
- Java中的操作符重载
- 如何加速gwt编译器?
- 在Hibernate中重新连接分离对象的正确方法是什么?
- 应该……接住环内还是环外?