加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 泛型:确保参数类型相同

发布时间:2020-12-15 08:47:38 所属栏目:Java 来源:网络整理
导读:我有以下方法: protected S void setValue(final S oldValue,final S newValue) { // Do something} 我想确保两个参数都是相同的类型.如果在尝试传递两种不同类型的参数时出现编译器错误,那将会很酷. 上述方式显然不正确.我可以放入一个String和一个Integer
我有以下方法:

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
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读