2012-09-08 97 views
1

在學習Java的基礎知識時,我記得遇到了將參數傳遞給類構造函數的特定語法。我發現這個語法是額外可讀的,但我很遺憾無法再找到它了。它看起來有點像以下:將參數傳遞給構造函數,替代語法

// Creating an instance of the Employee class (has property name, salary, etc) 
Employee fred = new Employee({ 
    name: "Fred", 
    salary: 5000 
    job: Jobs.PROGRAMMER 
}); 

你或許可以看到,它變得非常清楚了每個參數的構造手段,這樣就無需看文件 - 只是爲了瞭解簡單的代碼。

我混合語言或有這樣的語法存在?最終鏈接到手冊將不勝感激。

+1

在Java中,沒有空間傳遞參數給構造器,像that..by的方式,它的Java版本你來過這個syntax..i很好奇,知道的。 – Anand

+1

看起來像JavaScript語法。 – Pramod

回答

2

這不是Java語法(從來不是)。

你可以做什麼來實現類似的東西是用匿名類帶有初始這樣

class Employee{ 
    String first; 
    String last; 
} 

Employee mike = new Employee(){{ 
    first = "Mike"; 
    last = "Meyers"; 
}}; 

還有什麼是怎麼回事的解釋:http://blog.schauderhaft.de/2012/08/19/named-parameters-in-java-another-alternative/

+0

您在示例中缺少內括號。 –

+0

剛纔注意到它。修復。謝謝。 –

2

你也許會想類似於下面的代碼的東西:

SomeClass foo = new SomeClass(/* args */) { 
    { 
    protectedOrPublicField = someValue; 
    protectedOrPublicMethod(/*args*/); 
    } 
} 

這個構造一個對象,並調用在同一時間的方法。它被稱爲double brace initialization。這並不是你所要求的,但它是我所知道的Java中唯一看起來很熟悉的語法。

請注意,您可以使用它來設置受保護或公共字段的值。那樣看起來會和你的例子非常相似。

如果您希望您的構造函數更具可讀性,請考慮使用自描述static factory methodbuilder pattern。有關更多詳細信息,請參閱Joshua Bloch的優秀Effective Java第二版或查閱您最喜愛的搜索引擎。

0

葉氏,你混合C#named and optional arguments的新特性。但是,如果你創建類似@Duncan Jones的東西,那就是說匿名類是完全一樣的。然而,根據Java Specification 15.9.1

An anonymous class cannot have an explicitly declared constructor. 
相關問題