有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java此语法的含义是什么(列表<?扩展数字>数据)

我正在尝试使用charts4japi,其中一个构造函数具有以下特性:

public static Data newData(List<? extends Number> data)

对我来说,它看起来像某种形式的泛型,但我以前从未见过这种符号,我不理解它


共 (6) 个答案

  1. # 1 楼答案

    public static Data newData(List<? extends Number> data)
    

    这定义了一个方法,该方法接收实现List接口(ArrayList)的集合,该接口包含Number类(甚至是Number类本身)的任何子类

    实际上,这个概念与泛型有关,它被称为上界通配符。长话短说:它允许您编写一个没有特定类型限制的方法,而是一个层次结构限制

  2. # 2 楼答案

    <T extends SomeClass>
    

    当实际参数可以是某个类或其任何子类时使用。所以在你的情况下:

    public static Data newData(List<? extends Number> data)
    

    您的方法可以接受类型为Number的任何类的列表

    要了解有关Java泛型的更多信息,请参阅:

    http://docs.oracle.com/javase/tutorial/extra/generics/methods.html

  3. # 3 楼答案

    这意味着数据列表只能将数字类型或子数字类型的对象添加为双精度整数

  4. # 4 楼答案

    这是一个upper-bounded wildcard:? extends Number

    这意味着data可以是任何Number或子类的列表,例如List<Number>List<Integer>List<Double>

    Java中的泛型不是协变的,因此List<Double>不是List<Number>。这里,类型为List<? extends Number>的参数允许List<Double>以及List<Number>,但是类型为List<Number>的参数不允许List<Double>

    至于List部分,它可以是任何实现List的东西,比如LinkedList<Integer>ArrayList<Double>

  5. # 5 楼答案

    这是一种泛型。这意味着data参数是扩展Number的任何类的列表。i、 e.如果您有自定义类:

    public class Nomber extends number {
        //stuff...
    }
    

    它将以List<Nomber>作为变量

  6. # 6 楼答案

    是的,在泛型中是wildcard。这意味着该方法将接受扩展数字的任何类型的类列表

    例如:List<Integer>, List<Double>