java泛型边界

ben*_*nyl 2 java generics

我有以下代码:

public <T extends SomeObject> long doSomething(T someObject){
    List<? extends SomeObject> l = new LinkedList<>();
    l.add(someObject);
}
Run Code Online (Sandbox Code Playgroud)

这会导致编译错误 - 告诉我找不到合适的方法:add(T),为什么会这样?

如果l接受延伸的东西SomeObject不应该接受,someObject因为它必然延伸SomeObject

Ade*_*ros 12

List<? extends SomeObject> l
Run Code Online (Sandbox Code Playgroud)

你是什​​么意思?当然会产生错误.

举个例子:SomeObject是的Fruit,你有2个派生类AppleOrange

你的清单包含哪些内容?Apples还是Oranges?编译器无法分辨.所以它会产生错误.

如果您要更换 List<? extends SomeObject> lList<SomeObject> l.那么这将是因为工作AppleOrangeFruit.

  • 我只是觉得这样.认为这是一时冲动的咆哮.对于那些遇到泛型问题的用户来说,每天必须有20个问题,每当我看到这个问题时,考虑到我需要花多少时间和精力来完成他的代码并帮助他,我的灵魂会感到沉重. (2认同)