3

私は長い間 C# を使用してきましたが、Java で何かをする必要があります。

java に C# の struct 自動コンストラクタのようなものはありますか?

つまり、C# では

struct MyStruct
{
    public int i;
}
class Program
{
    void SomeMethod()
    {
        MyStruct mStruct; // Automatic constructor was invoked; This line is same as MyStruct mStruct = new MyStruct();
        mStruct.i = 5;   // mStruct is not null and can i can be assigned
    }
}

宣言時にJavaにデフォルトのコンストラクターを使用させることは可能ですか?

4

3 に答える 3

8

いいえ - Java はカスタム値型をまったくサポートしておらず、コンストラクターは常に明示的に呼び出されます。

ただし、C# の理解はとにかく間違っています。元の投稿から:

// Automatic constructor was invoked
// This line is same as MyStruct mStruct = new MyStruct();
MyStruct mStruct; 

それは真実ではない。ここでは明示的な初期化なしで書き込みできますが、コンパイラーがすべてに値が割り当てられていることを認識しない限り、そこから読み取ることはできません。mStruct.i

MyStruct x1; 
Console.WriteLine(x1.i); // Error: CS0170: Use of possibly unassigned field 'i'

MyStruct x1 = new MyStruct();
Console.WriteLine(x1.i); // No error
于 2012-07-28T14:22:25.843 に答える
2

いいえ、Java ではコンストラクターを明示的に呼び出す必要があります。

複数のコンストラクターが存在する可能性があるため、特定のコンストラクターを明示的に呼び出すことは、おそらく良い方法です。

于 2012-07-28T14:08:04.477 に答える
1

Java は Struct キーワードをサポートしていないため ( http://msdn.microsoft.com/en-us/library/ms228600(v=VS.90).aspxを参照)、public のみを持つ Class を使用する必要があります。オブジェクト (および関数なし)。常にクラスを初期化する必要があります。

于 2012-07-28T14:05:35.850 に答える