Java:从.NET构造函数转换

Java:从.NET构造函数转换,java,.net,constructor,Java,.net,Constructor,我们正在将一些.NET3.5代码转换为Java(Android) 此Java代码给出了以下错误: 标记“Chapters”上的语法错误,此标记后应为VariableDeclaratorId 这些类型都是正确的。您正在使用.NET/C#在创建对象时初始化属性的功能。要在Java(或旧的C#)中实现这一点,您需要做很长的一段路 Book book = new Book(); book.Chapters = 50; // etc this.add(book); Java没有,因此此语法无效 相反,您

我们正在将一些.NET3.5代码转换为Java(Android)

此Java代码给出了以下错误:

标记“Chapters”上的语法错误,此标记后应为VariableDeclaratorId

这些类型都是正确的。

您正在使用.NET/C#在创建对象时初始化属性的功能。要在Java(或旧的C#)中实现这一点,您需要做很长的一段路

Book book = new Book();
book.Chapters = 50;
// etc
this.add(book);
Java没有,因此此语法无效

相反,您可能希望执行以下操作:

Book book = new Book();

book.Chapters = 50;
book.OneBasedBookID = 1;
book.Long = "Bahai";
book.Short = "ba";
book.Color = c;
book.BookType = b;

this.add(book);

还要注意的是,Java没有这两个概念,典型的“好”实践是使用getter/setter,并且不以大写字母开始命名变量。但是,这对您的
Long
Short
成员不起作用,总的来说,这些实践在您的场景中可能不会提供任何价值。

您可以使用匿名类初始值设定技巧:

this.add (new Book() {{
    Chapters=50;
    OneBasedBookID = 1;
    Long = "Bahai";
    Short = "ba";
    Color = c;
    BookType = b;
}});

(+1)我不确定是否仅为此目的创建匿名类,它确实要求您声明
c
b
为最终类,但这是一种有趣的方法(并且具有与OP所需语法紧密匹配的好处)。@Loius-是的,它类似于非静态内部类,然后将值赋给封闭类型的成员。不过,最终得到的是匿名类型,而不是实际的
书籍。
this.add (new Book() {{
    Chapters=50;
    OneBasedBookID = 1;
    Long = "Bahai";
    Short = "ba";
    Color = c;
    BookType = b;
}});