[英]Java 1.7 vs C# List/Set/Map syntactic sugar
以下內容應該是 Java 1.7 的一部分:
List<String> list = ["item"];
String item = list[0];
Set<String> set = {"item"};
Map<String, Integer> map = {"key" : 1};
int value = map["key"];
在 C#(和 VB.NET)中幾乎可以完成相同的操作,但語法略有不同。 在 .NET 中,這是作為索引屬性實現的,這是任何開發人員都可以用來應用於自己的類的語言特性。
有誰知道這些功能是否針對 List、Set 和 Map 和子類進行了嚴格的硬編碼,或者這背后是否有更通用的語言功能?
這些功能都沒有進入 JDK7。 造成刪減的 Java 語言更改在此處列出為:
JSR 334:小語言增強(Project Coin)。 一組旨在簡化常見的日常編程任務的小語言更改:switch 語句中的字符串、try-with-resources 語句、改進的通用實例創建(“鑽石”)的類型推斷、簡化的可變參數方法調用、更好整數文字和改進的異常處理(多捕獲)
剩余的“Project Coin”特性和其他語言更改被放到了 JDK8 中:
JSR 294:模塊化編程的語言和 VM 支持。 增強了 Java 語言和虛擬機規范,以在編譯時和運行時支持模塊化編程
JSR 308:Java 類型的注釋。 對 Java 注釋語法的擴展,允許在任何出現的類型上進行注釋
JSR TBD:對 collections 的語言支持。 不可變列表、集合的文字表達式,
JSR 待定:項目 Lambda。 Java 編程語言的 Lambda 表達式(非正式地,“閉包”)和防御者方法
您指的是Project Coin的兩個不同的特性,它們未被接受包含在 JDK 7 中。
SomeClass a; SomeClass b; List<SomeClass> list = [a, b]; Map<String, SomeClass> map = { "key1": a, "key2": b }; Set<SomeClass> set = { a, b };
應該注意的是,這些文字只允許創建不可修改的(在 .NET 中為只讀)collections。 據我所知,C#中不存在此類文字(arrays除外,但Java中也存在此類文字很長時間了)。 它也與索引屬性沒有任何關系。
List<SomeClass> l = new ArrayList<>(); SomeClass first = new SomeClass(); l[0] = first; // instead of l.set(0, first); SomeClass retrieved = l[0] // instead of l.get(0); // Similar thing for maps.
That is the feature which is implemented in C# as indexed properties, and it only applies to the List
and Map
interfaces (remember that, contrary to the .NET Class Library, the Java interfaces are not usually prefixed with an I
) - it is nothing more而不是由編譯器轉換為對這些方法的調用。
在這兩種情況下,都沒有通用的語言特性,只有一點語法糖:
List
、 Set
或Map
。 (我似乎記得返回的具體類甚至不公開可見。)List
或Map
接口。他們希望在 Java 中添加一些其他語言(靜態/動態)已經具備的特性。map 的初始化方式與一些動態語言相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.