【问题标题】:java equivalence of C++'s template <int val> class foo{ };java 等价于 C++ 模板 <int val> class foo{ };
【发布时间】:2015-03-01 07:03:20
【问题描述】:

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

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

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

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

【问题讨论】:

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

标签: java c++ templates generics


【解决方案1】:

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

【讨论】:

  • 谢谢!这样就可以了!
猜你喜欢
  • 2020-08-14
  • 2017-07-02
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多