我知道我的问题可能看起来像重复的问题,但我已经阅读了许多类似的问题和答案,但我对下限 (? super) 特别感到困惑。请考虑这段代码。
import java.util.*;
public class Main {
// just adds numbers to the List nums
static void myadd(List<? super Number> nums){
nums.add(1);
nums.add(1.0f);
nums.add(1.1);
nums.add(3l);
}
public static void main(String[] args) {
List empty= new ArrayList<>();
myadd(empty);
System.out.println(empty);
}
}
Run Code Online (Sandbox Code Playgroud)
这是执行它的链接。
根据甲骨文文档
下限通配符将未知类型限制为特定类型或该类型的超类型
Number类是 Double、Float、Integer、Long 和 Short 类的超类,那么为什么这个方法执行得很好呢? 此方法 (myadd) 应该仅适用于 Number 类或其超类型的直接实例的对象,而不适用于其子类。
我已阅读以下答案,但我的疑问仍不清楚。
如果有人能解释我将不胜感激。