簡體   English   中英

Java 1.7 vs C# List/Set/Map 語法糖

[英]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 中。

  1. 支持集合文字

    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中也存在此類文字很長時間了)。 它也與索引屬性沒有任何關系。

  2. 列表和地圖的索引訪問語法

    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而不是由編譯器轉換為對這些方法的調用。

在這兩種情況下,都沒有通用的語言特性,只有一點語法糖:

  • 對於第一個功能,編譯器會將文字轉換為對一些方法的調用,以創建不可修改的ListSetMap (我似乎記得返回的具體類甚至不公開可見。)
  • 對於第二個功能,編譯器只會將表達式轉換為對相關方法的調用,只要 class 實現ListMap接口。

他們希望在 Java 中添加一些其他語言(靜態/動態)已經具備的特性。map 的初始化方式與一些動態語言相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM