假设我想要一个方法来获取应用程序中任何类型的对象,以验证它具有的所有字段(每个对象具有不同类型的不同字段)并将其包装到消息中。因此方法输入参数将是任何对象的实例
现在我的问题是:
将此输入参数作为 Object
有什么区别或Class<?>
?
?
表示“任何类型或类”,“Object”是 java 中的父类(super class)型。
如果有人能解释一下在哪些情况下最好使用它,我将不胜感激:
public validateAndConvertAnyObject(Object obj) {
// compute and return a message
}
什么时候使用它更好?
public validateAndConvertAnyObject(Class<?> obj) {
// compute and return a message
}
最佳答案
首先,您没有在方法中指定返回类型。
它无效。
其次,这两个参数完全不同。
public validateAndConvertAnyObject(Object obj)
可以接受任何对象。
同时public validateAndConvertAnyObject(Class<?> obj)
可以接受任何类(class)。
相当于
public validateAndConvertAnyObject(Object obj)
通用的将是:
public <T> void validateAndConvertAnyObject(T obj){
编译和类型删除后,它们提供相同的编译类。
所以在这个例子中,使用 Object
越明确就越有意义。
要使用反射将实例转换为另一个类,通常需要传递目标类:
public <T> T validateAndConvertAnyObject(Object obj, Class<T> targetClass){
...//processing on obj
}
你可以使用它:
MyObject myObject = ...;
MyOtherClass myOtherClass = validateAndConvertAnyObject(myObject, MyOtherClass.class);
关于java - 'Class<?>' 和 'Object' 作为方法参数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46744297/