JavaのStringクラスでできるように、オブジェクトを直接初期化することは可能ですか?
といった:
String str="something...";
私は私のカスタムクラスにも同じことをしたい:
class MyData{
public String name;
public int age;
}
それは可能ですか
MyClass obj1={"name",24};
または
MyClass obj1="name",24;
オブジェクトを初期化するには?またはそれがどのように可能になるのでしょう!
通常、コンストラクタを使用しますが、使用する必要はありません!
コンストラクターバージョンは次のとおりです。
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;
}
};
出来上がり!
クラス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構成を定義するときに非常に頻繁に使用されます。
コンストラクタを使用することは知っていますが、他の方法がありますか?
いいえ、コンストラクタに代わるものはありません。
これは基本的に、言語の基本的な保証の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);
オブジェクトのコンストラクターメソッドを作成する必要があります。コンストラクターメソッドは、値が必要なフィールドのパラメーターを受け取ります。
例:
public myClass( int age, String name)
{
this.age = age;
this.name = name;
}
次に、クラスでこれが必要です:
myClass class = new myClass(24, "name");
Javaには2つのタイプのコンストラクターがあります。
オブジェクトを作成するには、 パラメーター化されたコンストラクター を作成する必要があります。
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);
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
キーワードnewとコンストラクタを使用することは可能ですが、文字列とは異なり、これは非常に特別な種類のオブジェクトです。