3 java generics parameters methods
我有以下方法:
protected <S> void setValue(final S oldValue, final S newValue) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
我想确保两个参数都是相同的类型.如果在尝试传递两种不同类型的参数时出现编译器错误,那将会很酷.
上述方式显然不正确.我可以投入一个String和一个Integer,因为两者都延伸Object.
我的想要甚至可能吗?或者是唯一的方法来确保两个参数都是相同的类型,以检查方法内部并抛出一个IllegalArgumentException?
如果您认为S是正确的类型,则可以这样做:
protected <S, T extends S> void setValue(final S oldValue, final T newValue) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
你可以而且不能输入这些:
// Works
setValue("something", "something");
setValue(new Object(), new String());
// Doesn't work
setValue(new String(), new Object());
Run Code Online (Sandbox Code Playgroud)
要么
你可以做 :
protected <S> void setValue(final S oldValue, final S newValue, final Class<S> clazz) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
并使用它
setValue("something", "something", String.class);
Run Code Online (Sandbox Code Playgroud)
要么
protected <S> void setValue(final S oldValue, final S newValue) {
if(!oldValue.getClass().equals(newValue.getClass())) {
//throw something
}
}
Run Code Online (Sandbox Code Playgroud)