如果类B和类C扩展了类A,我有一个类型为B或C的对象,我如何确定它是哪种类型的实例?
当前回答
你可以使用:
Object instance = new SomeClass();
instance.getClass().getName(); //will return the name (as String) (== "SomeClass")
instance.getClass(); //will return the SomeClass' Class object
HTH。但我认为大多数时候,将其用于控制流或类似的东西并不是一个好的实践……
其他回答
如果你想在运行时知道,用isinstance()检查是不够的。 使用:
if(someObject.getClass().equals(C.class){
// do something
}
在“Class”类上还有一个. isinstance方法。如果你通过myBanana. getclass()获得一个对象的类,你可以看到你的对象myApple是否与myBanana via是同一个类的实例
myBanana.getClass().isInstance(myApple)
我在我的GeneralUtils类中使用blow函数,检查它可能有用
public String getFieldType(Object o) {
if (o == null) {
return "Unable to identify the class name";
}
return o.getClass().getName();
}
任何建议的方法的使用都被认为是基于糟糕的OO设计的代码气味。
如果您的设计很好,您应该不会发现自己需要使用getClass()或instanceof。
任何建议的方法都可以,但只是在设计方面要记住一些东西。
在这种情况下我们可以使用反射
objectName.getClass().getName();
例子:-
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getClass().getName();
}
在这种情况下,您将获得类的名称,该对象传递给HttpServletRequest接口引用变量。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap