[英]Accept any type for which there's a suitable method
我有 class MyClass
,它使用相同的方法名称进行重载:
public class MyClass {
void add(Integer val) {
// ...
}
void add(Boolean val) {
// ...
}
}
现在我想用一个额外的add
方法来扩展这个 class ,它需要一个Collection<..>
。 但是, Collection 的内部类型必须能够作为参数传递给已经实现的add
。
public class MyClass {
void add(Integer val) {
// ...
}
void add(Boolean val) {
// ...
}
void add(Collection<Object> value) {
for (Object v : value) {
add(v); // <-- ERROR here
}
}
}
运行它时失败并error: no suitable method found for add(Object)
。 我明白为什么这不起作用。 所以我的问题是,我如何指定Collection<..>
的方式是:
“接受一个内部类型具有合适
add
方法的集合”
非常感谢。
- - 编辑 - -
找到唯一可行的解决方案是这样做:
void addIntegers(Collection<Integer> value) {
for (Integer v : value) {
add(v);
}
}
void addBooleans(Collection<Boolean> value) {
for (Boolean v : value) {
add(v);
}
}
您可以声明通用T
如下
<T> void add(Collection<T> value) {
for (T v : value) {
if(v instanceof Boolean) {
add((Boolean) v);
} else if (v instanceof Integer) {
add((Integer) v);
} else {
throw new IllegalStateException("Unexpected value: " + v.getClass());
}
}
}
可以这样写:
void add(Collection<Object> value) {
for (Object v : value) {
if(v instanceof Integer){
add((int)v);
}
else if(v instanceof Boolean){
add((boolean)v);
}
}
}
但这看起来并不优雅和漂亮。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.