35

JavaのStringクラスでできるように、オブジェクトを直接初期化することは可能ですか:

そのような:

String str="something...";

カスタムクラスでも同じことをしたい:

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

それは可能ですか

MyClass obj1={"name",24};

また

MyClass obj1="name",24;

オブジェクトを初期化するには?またはそれがどのように可能になるか!

4

10 に答える 10

50

通常はコンストラクターを使用しますが、その必要はありません。

コンストラクターのバージョンは次のとおりです。

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
}

これは次のように使用されます:

MyData myData = new MyData("foo", 10);


ただし、例のようにフィールドが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;
    }
};

出来上がり!

于 2012-08-17T12:15:26.670 に答える
8

クラス Person がある場合:

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;
    }

}

実際に新しい Person オブジェクトを作成し、その firstName と lastName を次のように初期化できます。

 Person person = new Person(){{
     setFirstName("My FirstName");
     setLastName("MyLastName");
 }}

これは、XML 構成の代わりに Java コードを使用して Spring 構成を定義するときによく使用されます。

于 2014-04-28T06:50:59.143 に答える
4

値が必要なフィールドのパラメーターを受け取るオブジェクトのコンストラクター メソッドを作成する必要があります。

例:

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

次に、これが必要なクラスで:

myClass class = new myClass(24, "name");
于 2012-08-17T12:16:18.343 に答える
3

私はコンストラクターでそれを知っていますが、別の方法が存在するかどうかは?

いいえ、コンストラクタに代わるものはありません。

これは基本的に、言語の基本的な保証の 1 つです。オブジェクトは、そのコンストラクター以外の方法で構築することはできず、通常の代替構文はありませんnew ConstructorName(...)

私が思いつく最も近いアイデアは、次のような静的ファクトリ メソッドを使用することmcです。

class MyClass {
    ...
    public static mc(String name, int age) {
        return new MyClass(name, age);
    }
}

そして、する

import static some.pkg.MyClass.mc;

...

MyClass obj1 = mc("name",24);
于 2012-08-17T12:21:42.873 に答える
0
class MyData{

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

次に、この方法でクラスをインスタンス化できます。

MyData myData = new MyData("name", 24);
于 2012-08-17T12:16:33.210 に答える
0

キーワード new と using コンストラクターで可能ですが、非常に特殊な種類のオブジェクトである String とは異なります。

于 2012-08-17T12:15:14.437 に答える
-1

オブジェクトの初期化中、java には (new 演算子を含む) コンストラクターに代わるものはありません。あなたは次のように言及しました

文字列 str = "何か"

String は Java のリテラルであるため、その方法で文字列を初期化できます。そのように初期化できるのはリテラルのみです。複合オブジェクトは初期化できませんが、コンストラクターを使用した new 演算子でのみインスタンス化できます。

于 2012-08-17T12:43:45.607 に答える