java为什么这两个明显相同的对象有不同的类类型?
我有一个类User
,只有两个字段:id,name
package test;
public class User {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后在Main
类中,我尝试用两种不同的方法初始化用户对象:
package test;
/**
* @author lhuang
*/
public class Main {
public static void main(String[] args) {
User u = new User() {
{
setId(1l);
setName("LHuang");
}
};
System.out.println(u.getClass());
User u2 = new User();
u2.setId(1l);
u2.setName("LHuang");
System.out.println(u2.getClass());
}
}
然后我可以得到输出
class test.Main$1
class test.User
有趣的是为什么u类是Main的内部类类型?但实际上我仍然可以使用u.getId()
和u.getName()
方法
# 1 楼答案
这个
创建User的新匿名子类(外部大括号集),然后在其中定义一个初始化器块(内部大括号集)
出于清晰的原因,通常建议避免使用上述构造(没有多少人知道它是如何工作的),而且因为您正在创建一个内部类,所以它会隐式引用外部类。这可能会导致垃圾收集和序列化问题
话虽如此,我还是会谨慎地使用上述内容(例如,由于其简洁性,用于在单元测试中设置测试集合等)