C+的java等价性+';s模板<;int val>;类foo{}; 我是java新手,我正在尝试做类似于C++模板的事情: template <int value_> class Foo{ .... }; 模板 福班{ .... };

C+的java等价性+';s模板<;int val>;类foo{}; 我是java新手,我正在尝试做类似于C++模板的事情: template <int value_> class Foo{ .... }; 模板 福班{ .... };,java,c++,templates,generics,Java,C++,Templates,Generics,其中,具有不同值的实例的行为相同,但具有不同值的两个实例之间的交互取决于value1和value2。特别是,如果value1!=某些函数中的值2 一种可能的解决方案可能是将此类值存储在java类中并引发运行时异常,但编译时检测将非常有用。java最接近模板的是,但严格限制为强制使用“正确”类型。Java没有任何基于值的模板机制 您最好通过为感兴趣的值创建一系列包装器类来模拟此行为: 例如,接口: public interface IntWrapper { int getValue();

其中,具有不同
值的实例的行为相同,但具有不同
值的两个实例之间的交互取决于
value1
value2
。特别是,如果
value1!=某些函数中的值2


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

java最接近模板的是,但严格限制为强制使用“正确”类型。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) {
        // ...
    }
}
公共类Foo{
公共空间互动(T其他){
// ...
}
}

您将无法使用Java泛型实现编译时检测。谢谢!有没有其他方法可以在没有额外内存存储或代码复制的情况下进行编译时检查?我不知道。Java泛型基本上只是隐藏他们编译的Java字节码,以便在任何地方使用
Object
。谢谢!这就行了!