我們正在將一些.NET 3.5代碼轉換爲Java(Android)。Java:從.NET構造器轉換
此Java代碼提供了錯誤:
令牌 「章」 語法錯誤,VariableDeclaratorId預計此令牌
this.add (new Book() {Chapters=50, OneBasedBookID = 1,
Long = "Bahai", Short = "ba", Color = c, BookType = b; });
後的類型是正確的。
我們正在將一些.NET 3.5代碼轉換爲Java(Android)。Java:從.NET構造器轉換
此Java代碼提供了錯誤:
令牌 「章」 語法錯誤,VariableDeclaratorId預計此令牌
this.add (new Book() {Chapters=50, OneBasedBookID = 1,
Long = "Bahai", Short = "ba", Color = c, BookType = b; });
後的類型是正確的。
Java沒有object initializers,所以這個語法無效。
相反,你可能希望做這樣的事情:
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沒有的"proper" properties概念或者,和典型的「好」的做法是使用getter/setter方法,並不要將您的變量命名爲大寫字母。這對於您的Long
和Short
成員來說不起作用,總體而言,這些做法總體上可能無法在您的方案中提供任何價值。
您正在使用.NET/C#在創建對象時初始化屬性的能力。要在Java中(或在較早的C#中)完成它,你將不得不做很長的路要走。
Book book = new Book();
book.Chapters = 50;
// etc
this.add(book);
你可以使用匿名類初始化招:
this.add (new Book() {{
Chapters=50;
OneBasedBookID = 1;
Long = "Bahai";
Short = "ba";
Color = c;
BookType = b;
}});
確實在Java中這項工作? – 2010-08-12 02:36:08
(+1)我不確定爲了這個目的創建匿名類,它確實需要你聲明'c'和'b'是最終的,但這是一個有趣的方法(並且具有緊密匹配OP的期望語法)。 – 2010-08-12 02:39:38
@Loius - 是的,它類似於對非靜態內部類進行分類,然後將值分配給封閉類型的成員。儘管你最終得到了一個匿名類型,但並不是一本真正的「書」。 – 2010-08-12 02:41:16