源码

首页 » 归档 » 源码 » java – 支持实现接口的泛型类的静态函数…

java – 支持实现接口的泛型类的静态函数…


我有一个界面操作:

public interface Operations{

    Operations add(Operations op);

    Operations subtract(Operations op);
}

此界面应允许用户选择如何进行简单计算.例如,如果用户只想使用数据类型Integer及其基本操作,则可以使用MyInteger类:

// simple implementation without type check etc..
public final class MyInteger implements Operations{
    private final int delegate;

    public MyInteger(int i){
        delegate = i;
    }

    @Override
    Operations add(Operations other){
        return new MyInteger(delegate + ((MyInteger) other).delegate);
    }
    @Override
    Operations subtract(Operations other){
        return new MyInteger(delegate - ((MyInteger) other).delegate);
    }
    (...)
}

在其他类中,将根据接口操作的功能进行计算.但有时我需要一个静态上下文,比如valueOf(val)函数,它返回给定String,double,int等对应类的实现,如下例所示:

public class Calculation {

    private final D value1, value2;
    private final D value3 = D.valueOf(4);  // cannot implement this in interface 

    public Calculation(D value1, D value2){
        this.value1 =value1;
        this.value2 = value2;
    }

    public D sumPlusValue3(){
        return value1.plus(value2).plus(value3);
    }
}

所以

Calculation calc = new Calculation(new MyInteger(1), new MyInteger(2));
Operations result = calc.sumPlusValue3();

一般来说,我认为我必须使用像BuilderFactory这样的设计模式,以允许用户指定他想要的实现,例如

Operations integerImpl = OperationsBuilder.create("Integer");

但是在研究了这些模式之后,我找不到一种干净的方法来在Calculation类中获得value3的泛型类D的实现.

编辑1:

我编辑了这个问题并标记了@Stefan Haustein的答案,因为它是我问题的最佳解决方案.
但是@davidxxx的答案对于我的初始问题也是一个很好的答案 – 如何只表示valueOf(int val)函数.

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/java-zhichishixianjiekoudefanxingleidejingtaihanshu.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:11月 11, 2019 at 07:29 下午

热评文章