java等价于C ++模板<int val =“”> class foo {}; </int>

时间:2015-03-01 07:03:20

标签: java c++ templates generics

我是Java的新手,我正在尝试做类似于以下C ++模板的事情:

template <int value_>
class Foo{
    ....
};

其中不同value_的实例化行为相同,但具有不同value_的两个实例之间的互动将取决于value1value2。特别是,如果某个函数中有value1 != value2,则会导致编译时失败。

一种可能的解决方案可能是将这样的值存储在java类中并抛出运行时异常,但编译时检测会很有用。

1 个答案:

答案 0 :(得分:3)

java最接近模板的是generics,但它严格限于强制执行&#34; right&#34;使用的类型。 Java没有任何基于价值的模板机制。

您可以做的最好的事情是通过为您感兴趣的值创建一系列包装类来模拟此行为:

,例如,界面:

public interface IntWrapper {
    int getValue();
}

以及几个实现:

public class OneWrapper implements IntWrapper {
    @Override
    public int getValue() {
        return 1;
    }
}

public class TwoWrapper implements IntWrapper {
    @Override
    public int getValue() {
        return 2;
    }
}

然后使用它们来模拟int值:

public class Foo <T extends IntWrapper> {
    public void interact (T other) {
        // ...
    }
}