java - 通用方法写入列表

标签 java generics

我正在尝试创建一个通用方法,它接受以下格式的数字列表。我知道我应该能够将任何类添加到列表“o”中,该列表至少是一个数字( float 、整数、 double ),但我也应该能够添加任何对象,因为所有类都从对象扩展。换句话说,object 是任何类的父类(super class)。所以我想知道,为什么我在 o.add(p); 行上收到错误?

public int checkType(List<? super Number> o) 
{
   Object p = new Object();
   //error
   o.add(p);
   return - 1;
 }

我遵循Difference between <? super T> and <? extends T> in Java中对泛型的解释这是公认的答案。

最佳答案

类型参数 List<? super Number> o指定任何 List它可以容纳 Number可以传递给它。

可能是 List<Object> ,但这也可能是 List<Number> .

因此编译器将允许您仅添加 Number (或子类型)对象。

要进行测试,请使用以下参数调用您的方法。

checkType(new ArrayList<Object>()); // Works fine (and it can hold Object type).
checkType(new ArrayList<Number>()); // Works fine (But it can NOT hold Object type).

所以,正如你看到的 List<? super Number>意味着您正在尝试添加 Number到列表(PECS 规则)。

关于java - 通用方法写入列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370909/

相关文章:

java - 将构造函数类型参数放在 * 之前 * 类型是什么意思?

泛型编程中的 C++ 类型验证

java - 如何使用扫描仪跳过空格并在单行中获取输入

java - 使用 Tomcat 部署现有的 webapp

java - 为什么一个对象应该有一个返回 "this"的方法?

java - HTTP 状态 500 - 无法为 JSP 编译类,方法未定义

java - mediaMetadataRetriever.setDataSource(getBaseContext(),uri)引发非法参数异常

java - 对于java泛型来说<>意味着什么?

c++ - 从函数返回通用类型数据

C# 泛型类型推断与协变 - 错误或限制