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_
的两个实例之间的交互将取决于 value1
和 value2
。特别是,如果在某些函数中 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) {
// ...
}
}
我是 Java 的新手,正在尝试做类似于以下 C++ 模板的事情:
template <int value_>
class Foo{
....
};
其中具有不同 value_
的实例化行为相同,但具有不同 value_
的两个实例之间的交互将取决于 value1
和 value2
。特别是,如果在某些函数中 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) {
// ...
}
}