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 ),因此您需要使用只有公共的类对象(并且没有函数)。您总是需要初始化类。

于 2012-07-28T14:05:35.850 回答