gpt4 book ai didi

java - 警告 : A generic array of Object&Serializable&Comparable 是为可变参数创建的

转载 作者:行者123 更新时间:2023-11-30 07:35:37 25 4
gpt4 key购买 nike

如果我用不同类的对象调用一个(通用的)可变参数方法,我会收到一个有趣的警告:

List<?> result =  Arrays.asList("1", 1);

A generic array of Object&Serializable&Comparable is created for a varargs parameter

我可以通过转换为通用接口(interface)或类来消除警告,

List<Serializable> result = asList((Serializable) "1", (Serializable) 1);

但是 Object&Serializable&Comparable<?> 是什么意思?意思是?它是否也可以用于方法签名的泛型类型注释(如 extendssuper )?

最佳答案

类(class)Object和接口(interface) ComparableSerializable是类 Integer 的父类(super class)型和 String有共同点。

由于泛型中的类型删除和数组的协变性,泛型和数组不能很好地相互混合。方法Arrays#asList将可变参数作为输入,在 Java 中,可变参数在内部是用数组实现的。因此警告。 (您可以在 Josh Bloch 的 Effective Java 中阅读更多相关信息。)

现在来回答你的第二个问题,<Object & Comparable<Whatever> & Serializable>可以在方法签名中使用以指定对类型参数的约束。 (请参阅 this answer。)然而,Java 不允许在泛型类型注释中使用此类类型。

换句话说,以下是有效的:

public static void <A extends Comparable<A> & Serializable> meth(A a);

但以下不是:

List<Serializable & SomeOtherInterface> list = ...;

关于java - 警告 : A generic array of Object&Serializable&Comparable<? > 是为可变参数创建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4282517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com