web-dev-qa-db-ja.com

javaでオブジェクトを直接初期化する

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

といった:

String str="something...";

私は私のカスタムクラスにも同じことをしたい:

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

それは可能ですか

MyClass obj1={"name",24};

または

MyClass obj1="name",24;

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

27
satvinder singh

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

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

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である場合は、それを行うことができますwithoutコンストラクターの定義。これは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;
    }
};

出来上がり!

40
Bohemian

クラス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構成を定義するときに非常に頻繁に使用されます。

5
Feng

コンストラクタを使用することは知っていますが、他の方法がありますか?

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

これは基本的に、言語の基本的な保証の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);
3
aioobe

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

例:

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

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

myClass class = new myClass(24, "name");
3
CBredlow

Javaには2つのタイプのコンストラクターがあります。

  1. デフォルトのコンストラクター
  2. パラメーター化されたコンストラクター

オブジェクトを作成するには、 パラメーター化されたコンストラクター を作成する必要があります。

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);
0
M. Abbas
    package com.company;

public class InitializationOfObject {
    int a ;
    int b ;

    InitializationOfObject(){
    }

    InitializationOfObject( int r , int n){
        this.a = r;
        this.b = n;
        System.out.println("Object initialization by constructor  ");
    }

    void methodInitialization(int k, int m){
        System.out.println("object initialization via method");
        this.a = k;
        this.b = m;
    }

    void display(){
        System.out.println("k = " +a+ "m = "+b);
    }

    public static void main(String... arg){
        InitializationOfObject io = new InitializationOfObject();
        InitializationOfObject io2 = new InitializationOfObject(45,65);
        io.a = io2.a;
        io.b = io2.b;
        io.display();

        io.methodInitialization(34,56);
        io.display();

        io.a = 12;
        io.b = 24;
        System.out.println("object initialization via refrence");
        System.out.println("a = "+io.a+" "+ " b ="+io.b);
    }

}

//コンストラクタによるオブジェクトの初期化

k = 45m = 65

メソッドを介したオブジェクトの初期化

k = 34m = 56

参照によるオブジェクトの初期化

a = 12  b =24
0
charu

キーワードnewとコンストラクタを使用することは可能ですが、文字列とは異なり、これは非常に特別な種類のオブジェクトです。

0
Oscar Gomez