【发布时间】:2017-11-05 15:22:17
【问题描述】:
假设我有一个接口和多个实现此接口的类:
public interface MyInterface {
public String getString();
public String getAnotherString();
}
现在我有了实现这个接口的类:
public class MyClass1 implements myInterface {
@Override
public String getString() {
return "A String";
}
@Override
public String getAnotherString() {
return "foo";
}
}
还有:
public class MyClass2 implements myInterface {
@Override
public String getString() {
return "Another String";
}
@Override
public String getAnotherString() {
return "bar";
}
}
我怎样才能让方法接受实现myInterface 的类的对象呢?
public <T extends MyInterface> void aMethod(T object) {
objects.add(object); //⚡ doesn't work
}
这可行,但它不允许我将这些对象添加到我当时声明的 ArrayList 中:
ArrayList<? extends MyInterface> objects = new ArrayList<>();
我做错了什么? :/
【问题讨论】:
-
为什么要这样做?为什么你不能只使用
ArrayList<myInterface> objects -
为什么不
public void aMethod(myInterface obj)和ArrayList<myInterface>? -
你知道oyu有两个类叫
myClass1吗?另外,请尊重 Java 命名约定:类和接口应该用UpperCamelCase编写。 -
天哪.. 我可以发誓这是我尝试的第一件事。现在我确实花了 2 个小时的研究而没有注意到这一点。但感谢您指出这一点。 :)
-
简短的回答是永远不要使用
? extends或super。在一些复杂的情况下需要它们,但是,IMO,大多数情况可以而且应该重新设计。