java - 泛型:确保参数的类型相同

标签 java generics methods parameters

我有以下方法:

protected <S> void setValue(final S oldValue, final S newValue) {
    // Do something
}

我想确保两个参数的类型相同。如果在您尝试传递两种不同类型的参数时出现编译器错误,那就太好了。

上面的方式显然是不正确的。我可以放入一个 String 和一个 Integer,因为它们都是从 Object 扩展而来的。

我的愿望有可能实现吗?或者是确保两个参数类型相同的唯一方法是在方法内部检查它并抛出 IllegalArgumentException

最佳答案

如果你认为 S 是正确的类型,你可以这样做:

protected <S, T extends S> void setValue(final S oldValue, final T newValue) {
    // Do something
}

你可以也不能输入这些:

// Works
setValue("something", "something");
setValue(new Object(), new String());

// Doesn't work
setValue(new String(), new Object());

你可以这样做:

protected <S> void setValue(final S oldValue, final S newValue, final Class<S> clazz) {
    // Do something
}

然后像那样使用它

setValue("something", "something", String.class);

protected <S> void setValue(final S oldValue, final S newValue) {
    if(!oldValue.getClass().equals(newValue.getClass())) {
        //throw something
    }
}

关于java - 泛型:确保参数的类型相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9299194/

相关文章:

java - Retrofit2 POST 方法获取代码 400,但适用于 ReSTLet 客户端

java - 为什么 Java 8 泛型类型推断会选择这种重载?

javascript - jQuery 对象构造函数 - 调用自身的方法

python - render_template 中的 Flask 参数

Java ArrayDeque 删除和轮询方法错误

Java RegEx 将自关闭 xml 标签转换为结束标签

java - NoClassDefFoundError : JavacProcessingEnvironment at runtime after tomcat 8 upgrade

java - 有没有与 Android 的 Xcode clang 静态分析器相当或相似的东西?

c# - 检索实现给定接口(interface)的对象列表

c# - 通用 EventArgs 类未显示在 WinForms 设计器的属性网格上