为什么这两个看似相同的对象有不同的类类型?

Lip*_*ang 1 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在Main课堂上,我尝试用两种不同的方法初始化User对象:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以得到输出

class test.Main$1
class test.User
Run Code Online (Sandbox Code Playgroud)

有趣的是为什么u类是Main的内部类类型?但实际上我仍然可以使用u.getId()u.getName()方法.

Lui*_*oza 6

您正在创建一个从此处扩展的匿名类User:

User u = new User() { //<-- this open bracket defines a new class
        {
            setId(1l);
            setName("LHuang");
        }
    };
Run Code Online (Sandbox Code Playgroud)