html5网站代码,wordpress作品集,jsp简单的网站开发例子,网络维护技术java 自定义运算符总览 操作员重载有多种语言可用。 Java对String类型的运算符的支持对运算符的重载非常有限。 我们可以利用其他语言支持运算符的不同方式#xff0c;但是我们可以在Java中实现一个使用Java已经使用的约定的实现。 获取#xff0c;设置和放置操作 集合的运… java 自定义运算符 总览 操作员重载有多种语言可用。 Java对String类型的运算符的支持对运算符的重载非常有限。 我们可以利用其他语言支持运算符的不同方式但是我们可以在Java中实现一个使用Java已经使用的约定的实现。 获取设置和放置操作 集合的运算符重载的一个常见示例是使用数组符号a [b]访问集合本身。 当获取时很简单因为List和Map都有一个get方法这与JavaBean getXxx命名约定一致。 ListString text ...
String s text[2]; // text.get(2);MapString, MyType map ...
MyType mt map[Hello]; // map.get(Hello)MyType mt ...
String xxx ...
String s mt[xxx]; // mt.getXxx(); 在基于索引或键设置值时我们有JavaBeans中的List.setMap.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);添加操作 加法操作更有趣因为可以结合使用。 ListInteger 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.htmljava 自定义运算符