日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 自定义运算符_Java中集合的自定义运算符

發布時間:2023/12/3 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 自定义运算符_Java中集合的自定义运算符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java 自定義運算符

總覽

操作員重載有多種語言可用。 Java對String類型的+運算符的支持對運算符的重載非常有限。

我們可以利用其他語言支持運算符的不同方式,但是我們可以在Java中實現一個使用Java已經使用的約定的實現。

獲取,設置和放置操作

集合的運算符重載的一個常見示例是使用數組符號a [b]訪問集合本身。 當獲取時很簡單,因為List和Map都有一個get方法,這與JavaBean getXxx()命名約定一致。

List<String> text = ... String s = text[2]; // text.get(2);Map<String, MyType> map = ... MyType mt = map["Hello"]; // map.get("Hello")MyType mt = ... String xxx = ... String s = mt[xxx]; // mt.getXxx();

在基于索引或鍵設置值時,我們有JavaBeans中的List.set(),Map.put()和setXxx()。 我們可以通過三種方式解決此問題。

  • 將設置方法添加到Map。
  • 使用約定來查找set或put方法,并抱怨兩者是否存在。
  • 默認為set(),但添加一個注釋,將其覆蓋到put()中。
  • 我們向所有集合添加新的特殊方法進行設置。
  • 演示最簡單的選項是編譯器選擇放置還是放置的位置,盡管這不太可能是最佳選擇。

    text[2] = "Hi"; // text.set(2, "Hi");map["Hello"] = "World"; // text.put("Hello", "World");mt[xxx] = "Updated"; // mt.setXxx("Updated");

    添加操作

    加法操作更有趣,因為可以結合使用。

    List<Integer> nums = AtomicInteger ai =nums += 5; // nums.add(5);ai += 5; // ai.addAndGet(5);nums[1] += 5; // is it thread safe?mt[xxx] += 5; // mt.addXxx(5);

    最后一個示例的問題是,開發人員可能不知道對線程安全集合執行了不安全的操作。 如果將此映射到

    nums.set(1, nums.get(1) + 5)); // not thread safe

    這不是線程安全的。 相反,我們可以將其映射到lambda函數。

    nums.update(1, x -> x + 5); // could be thread safe

    底層的List可以使線程安全。

    同樣對于Map,您可以調用compute

    map["Hello"] += " !!";

    轉換為:

    map.compute("Hello", (k, v) -> v + " !!");

    結論

    只需很少更改現有代碼,就可以添加對對象類型的操作員支持。 您可以使用現有的約定,盡管您可能會發現在某些情況下需要使用批注來更明確地控制它的工作方式。

    翻譯自: https://www.javacodegeeks.com/2015/09/custom-operators-for-collections-in-java.html

    java 自定義運算符

    總結

    以上是生活随笔為你收集整理的java 自定义运算符_Java中集合的自定义运算符的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。