直接在java中初始化对象

sat*_*ngh 27 java initialization object

是否可以直接初始化对象,就像我们在java中使用String类一样:

如:

String str="something...";
Run Code Online (Sandbox Code Playgroud)

我想为我的自定义类做同样的事情:

class MyData{
public String name;
public int age;
}
Run Code Online (Sandbox Code Playgroud)

是可能的

MyClass obj1={"name",24};
Run Code Online (Sandbox Code Playgroud)

要么

MyClass obj1="name",24;
Run Code Online (Sandbox Code Playgroud)

初始化对象?或者它是如何可能的!

Boh*_*ian 40

通常,您将使用构造函数,但您不必!

这是构造函数版本:

public class MyData {
    private String name;
    private int age;

    public MyData(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getter/setter methods for your fields
}
Run Code Online (Sandbox Code Playgroud)

这是这样使用的:

MyData myData = new MyData("foo", 10);
Run Code Online (Sandbox Code Playgroud)


但是,如果您的字段是protected或者public,如您的示例中所示,您可以在定义构造函数的情况下执行此操作.这是java中最接近你想要的方式:

// Adding special code for pedants showing the class without a constuctor
public class MyData {
    public String name;
    public int age;
}

// this is an "anonymous class"
MyData myData = new MyData() {
    {
        // this is an "initializer block", which executes on construction
        name = "foo";
        age = 10;
    }
};
Run Code Online (Sandbox Code Playgroud)

瞧!

  • @aioobe你一定是在开玩笑......我假设人们实际上会读"没有构造函数",意思是"没有构造函数"......即"没有构造函数定义你的类".哎呀 (2认同)

小智 5

如果您有班级人员:

public class Person {

    private String lastName;
    private String firstName;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

}
Run Code Online (Sandbox Code Playgroud)

您实际上可以创建一个新的Person对象,并使用以下命令初始化其firstName和lastName:

 Person person = new Person(){{
     setFirstName("My FirstName");
     setLastName("MyLastName");
 }}
Run Code Online (Sandbox Code Playgroud)

当使用Java代码而不是XML配置定义Spring Configuration时,经常会用到它。

  • 警告:这样做实际上是在创建一个匿名内部类,而不仅仅是初始化一个对象。[查看此答案](http://stackoverflow.com/a/27521360/2600833)解释了一些潜在的陷阱。 (4认同)

Osc*_*mez 0

可以使用关键字 new 并使用构造函数,但不像 String,它是一种非常特殊的对象。