【发布时间】:2016-04-20 15:27:25
【问题描述】:
我想实现一个方法来比较相同类型的对象。
将isOnceOf()实现为编译时类型严格并在第3行给我编译错误是否可行?
目前我只收到警告。
public static void main(String[] args) {
System.out.println(isOneOf(3, 1, 2, 3)); // true
System.out.println(isOneOf("A", "B", "C", "D")); // false
System.out.println(isOneOf(1, "B", "C", "D")); // false, warn
}
public static <T> boolean isOneOf(T obj, T mate, T... mates) {
if (obj == null) {
return false;
}
if (obj.equals(mate)) {
return true;
}
for (T m : mates) {
if (obj.equals(m)) {
return true;
}
}
return false;
}
【问题讨论】:
-
类型推断对你不利 =/.
-
其实,是的,你可以:
System.out.println(MyClass.<Integer>isOneOf(1, "B", "C", "D"));会失败。但是你不能强制调用者使用这个表单。 -
对我来说,唯一的解决方案是这里显示的stackoverflow.com/q/9299194/1743880。添加
Class<T>参数。 -
您为什么要这样做?你不能这样做的原因是没有类型安全的理由这样做。
标签: java generics type-inference