我有以下方法:
protected <S> void setValue(final S oldValue, final S newValue) {
// Do something
}
我想确保两个参数的类型相同。如果当您尝试传递两种不同类型的参数时出现编译器错误,那就太酷了。
上面的方式显然不是正确的方式。我可以放入一个String
and an 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());
or
你可以做 :
protected <S> void setValue(final S oldValue, final S newValue, final Class<S> clazz) {
// Do something
}
并像这样使用它
setValue("something", "something", String.class);
or
protected <S> void setValue(final S oldValue, final S newValue) {
if(!oldValue.getClass().equals(newValue.getClass())) {
//throw something
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)