2010-08-12 30 views
2

我們正在將一些.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; }); 

後的類型是正確的。

回答

3

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方法,並不要將您的變量命名爲大寫字母。這對於您的LongShort成員來說不起作用,總體而言,這些做法總體上可能無法在您的方案中提供任何價值。

5

您正在使用.NET/C#在創建對象時初始化屬性的能力。要在Java中(或在較早的C#中)完成它,你將不得不做很長的路要走。

Book book = new Book(); 
book.Chapters = 50; 
// etc 
this.add(book); 
1

你可以使用匿名類初始化招:

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

確實在Java中這項工作? – 2010-08-12 02:36:08

+1

(+1)我不確定爲了這個目的創建匿名類,它確實需要你聲明'c'和'b'是最終的,但這是一個有趣的方法(並且具有緊密匹配OP的期望語法)。 – 2010-08-12 02:39:38

+0

@Loius - 是的,它類似於對非靜態內部類進行分類,然後將值分配給封閉類型的成員。儘管你最終得到了一個匿名類型,但並不是一本真正的「書」。 – 2010-08-12 02:41:16