栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

执行映射减少操作的通用方法。(Java-8)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

执行映射减少操作的通用方法。(Java-8)

您所提出的示例与Java 8无关,与Java中泛型的工作原理无关。

Function<T, Integer>function
并将在编译时
Function<T, Double>function
进行类型擦除,并将其转换为
Function
。方法重载的经验法则是具有不同的数量,类型或参数顺序。由于这两种方法都将转换为采用
Function
参数,因此编译器会抱怨它。

话虽如此,srborlongan已经提供了一种解决该问题的方法。该解决方案的问题在于,您必须

Test
针对每种类型(整数,双精度等)上的每种类型的操作(加法,减法等)不断修改类。另一种解决方案是使用
methodoverriding
而不是
method overloading

Test
如下更改类:

public abstract class Test<I,O extends Number> {    List<I> list = new ArrayList<>();    public O performOperation(Function<I,O> function) {        return list.stream().map(function).reduce((a,b)->operation(a,b)).get();    }    public void add(I i) {        list.add(i);    }    public abstract O operation(O a,O b);}

创建一个子类

Test
将添加两个
Integer

public class MapStringToIntAddtionOperation extends Test<String,Integer> {    @Override    public Integer operation(Integer a,Integer b) {        return a+b;    }}

然后,客户代码可以使用上述代码,如下所示:

public static void main(String []args) {    Test<String,Integer> test = new MapStringToIntAddtionOperation();    test.add("1");    test.add("2");    System.out.println(test.performOperation(Integer::parseInt));}

使用这种方法的优点是您的

Test
班级符合该
open-closed
原则。要添加新的运算(如乘法),您要做的就是添加的新子类
Test
和将两个数字相乘
override
operation
方法。将其与Decorator模式结合使用,您甚至可以最小化必须创建的子类的数量。

注意 此答案中的示例仅供参考。有很多改进的领域(例如使

Test
功能接口代替抽象类)超出了问题的范围。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570468.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号