java 自定义运算符_Java中集合的自定义运算符
java 自定義運(yùn)算符
總覽
操作員重載有多種語言可用。 Java對(duì)String類型的+運(yùn)算符的支持對(duì)運(yùn)算符的重載非常有限。
我們可以利用其他語言支持運(yùn)算符的不同方式,但是我們可以在Java中實(shí)現(xiàn)一個(gè)使用Java已經(jīng)使用的約定的實(shí)現(xiàn)。
獲取,設(shè)置和放置操作
集合的運(yùn)算符重載的一個(gè)常見示例是使用數(shù)組符號(hào)a [b]訪問集合本身。 當(dāng)獲取時(shí)很簡(jiǎn)單,因?yàn)長(zhǎng)ist和Map都有一個(gè)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();在基于索引或鍵設(shè)置值時(shí),我們有JavaBeans中的List.set(),Map.put()和setXxx()。 我們可以通過三種方式解決此問題。
演示最簡(jiǎn)單的選項(xiàng)是編譯器選擇放置還是放置的位置,盡管這不太可能是最佳選擇。
text[2] = "Hi"; // text.set(2, "Hi");map["Hello"] = "World"; // text.put("Hello", "World");mt[xxx] = "Updated"; // mt.setXxx("Updated");添加操作
加法操作更有趣,因?yàn)榭梢越Y(jié)合使用。
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);最后一個(gè)示例的問題是,開發(fā)人員可能不知道對(duì)線程安全集合執(zhí)行了不安全的操作。 如果將此映射到
nums.set(1, nums.get(1) + 5)); // not thread safe這不是線程安全的。 相反,我們可以將其映射到lambda函數(shù)。
nums.update(1, x -> x + 5); // could be thread safe底層的List可以使線程安全。
同樣對(duì)于Map,您可以調(diào)用compute
map["Hello"] += " !!";轉(zhuǎn)換為:
map.compute("Hello", (k, v) -> v + " !!");結(jié)論
只需很少更改現(xiàn)有代碼,就可以添加對(duì)對(duì)象類型的操作員支持。 您可以使用現(xiàn)有的約定,盡管您可能會(huì)發(fā)現(xiàn)在某些情況下需要使用批注來更明確地控制它的工作方式。
翻譯自: https://www.javacodegeeks.com/2015/09/custom-operators-for-collections-in-java.html
java 自定義運(yùn)算符
總結(jié)
以上是生活随笔為你收集整理的java 自定义运算符_Java中集合的自定义运算符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 取消涉税备案流程(取消涉税备案)
- 下一篇: ddos攻击ip软件下载(最新ddos攻