为什么下面的代码在我尝试编译时会引起警告?使用泛型返回列表的接口导致警告
Bag.java:
import java.util.List;
public interface Bag<T> {
public List<String> getOwnerNames();
}
BagException.java:
public class BagException extends Exception {
public BagException(Bag badBag) {
super(buildMessage(badBag));
}
private static String buildMessage(Bag badBag) {
// BagException.java:10: warning: [unchecked] unchecked conversion
// List<String> owners = badBag.getOwnerNames();
// ^
// required: List<String>
// found: List
List<String> owners = badBag.getOwnerNames();
return "Something went wrong with the bag of " + String.join(", ", owners);
}
}
List<String> owners = badBag.getOwnerNames()
在buildMessage
导致即使该方法被声明为返回List<String>
警告。
看来非常奇怪的是,这些变化使报警消失:
在
buildMessage
参数使用Bag<Integer> badBag
代替Bag badBag
:private static String buildMessage(Bag<Integer> badBag) {
在界面使用
Bag
代替Bag<T>
:public interface Bag {
我期待该方法getOwnerNames
是类型的Bag
T
的无关。如果您可以回答以下其中一个问题,这将有所帮助:
- 为什么我会收到警告?
- 除了压制它之外,我该怎么办?
关于重复:现在我看到我一直在寻找错误的术语。我应该寻找“原始类型”或“通配符”。 – Markus