java C++ 模板的等价性 <int val> class foo{ };

java equivalence of C++'s template <int val> class foo{ };

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

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

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

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

java 最接近模板的是 generics,但它严格限于强制使用 "right" 类型。 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) {
        // ...
    }
}