Java 与x27之间的差异;类别<&燃气轮机';和';对象';作为方法的论据
假设我想要一个方法,在我的应用程序中获取任何类型的对象,以验证它拥有的所有字段(每个对象具有不同类型的不同字段),并将其包装为消息。因此,方法输入参数将是任何对象的实例 现在我的问题是: 将此输入参数作为Java 与x27之间的差异;类别<&燃气轮机';和';对象';作为方法的论据,java,Java,假设我想要一个方法,在我的应用程序中获取任何类型的对象,以验证它拥有的所有字段(每个对象具有不同类型的不同字段),并将其包装为消息。因此,方法输入参数将是任何对象的实例 现在我的问题是: 将此输入参数作为对象或类有什么区别 据我所知,?表示“任何类型或类”,“对象”在java中是一个超级类型 如果有人能向我解释在哪些情况下使用此选项更好,我将不胜感激: public validateAndConvertAnyObject(Object obj) { // compute and retu
对象
或类
有什么区别
据我所知,?
表示“任何类型或类”,“对象”在java中是一个超级类型
如果有人能向我解释在哪些情况下使用此选项更好,我将不胜感激:
public validateAndConvertAnyObject(Object obj) {
// compute and return a message
}
什么时候用这个更好
public validateAndConvertAnyObject(Class<?> obj) {
// compute and return a message
}
public validateAndInvertanyObject(类obj){
//计算并返回消息
}
第一个方法可以用任何对象作为参数调用,例如“foo”
、42
或Integer.class
。第二个类只接受类对象,例如“foo”.getClass()
或String.class
首先,您不在方法中指定返回类型。无效。
其次,这两个参数完全不同。
public validateAndConvertAnyObject(Object obj)
可以接受任何对象
而public validateAndInvertanyObject(类obj)
可以接受任何课程
相当于
public validateAndConvertAnyObject(Object obj)
使用通用的将是:
public <T> void validateAndConvertAnyObject(T obj){
你可以用它:
MyObject myObject = ...;
MyOtherClass myOtherClass = validateAndConvertAnyObject(myObject, MyOtherClass.class);
类
和对象
对象
这将实例作为参数
Class
这将类作为参数
例子
对象可以等于String
,对于类似的结果,您可以使Class
等于java.lang.String
混乱
从技术上讲,您可以将
Class
的实例作为对象传递,这会增加混淆,这是使用Class
的一个很好的理由,因为它可以防止实例和它的类混淆。对象
实际上表示创建的对象的实例,例如:
String text = "Hello World!";
Object textAsObj = (Object) text;
虽然Class
仅表示对象的类,但它与该类的实际实例没有关联:
Class<?> textClass = Class.forName("java.util.String");
下面是一个示例,您可以使用它访问给定对象的字段
:
Person person = new Person("John Doe");
Class<Person> personClass = person.getClass();
Field nameField = personClass.getDeclaredField("name");
String name = (String) nameField.get(person);
Person-Person=新人(“约翰·多伊”);
Class personClass=person.getClass();
FieldNameField=personClass.getDeclaredField(“名称”);
String name=(String)nameField.get(person);
我不认为您实际上是自己编写代码来找出答案的@HosseinBoka如果用户回答了您的问题,请也接受他的回答()。如果没有,那么请说明还有什么问题没有回答,这是StackOverflow的一个关键部分,非常感谢。感谢所有试图提供帮助但我没有得到答案的人,我停止了发布,因为一些朋友没有考虑我的问题是关于这两种方法调用的用法,而不是关于差异。我用@Zabuza的方式标出了第一个答案
String text = "Hello World!";
Class<String> textClass = text.getClass();
Person person = new Person("John Doe");
Class<Person> personClass = person.getClass();
Field nameField = personClass.getDeclaredField("name");
String name = (String) nameField.get(person);