Java 等效于 C++ 模板 <int val> class foo{ };

标签 java c++ templates generics

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

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

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

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

最佳答案

Java 最接近模板的是 generics ,但它严格限于强制使用“正确的”类型。 Java 没有任何基于值的模板机制。

您最好的办法是通过为您感兴趣的值创建一系列包装类来模拟此行为:

例如,一个接口(interface):

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++ 模板 <int val> class foo{ };,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791030/

相关文章:

java - 如何使用停止按钮停止运行 Java 代码

c# - 我可以以编程方式启动 Windows Management Instrumentation 服务吗?

javascript - 适用于客户端和服务器的 ASP.NET MVC 模板

c++ - 如何在 Visual Studio 2017 中支持 Variadic 模板类型

c++ - 没有对模板函数的匹配函数调用

java - 错误消息二进制 XML 文件行 #0 : Error inflating class

c# - 图论算法

java - 如何在类外访问私有(private)数据成员?

c++ - 结构扩展结构的静态初始化

c++ - 扩展通用功能