java.util.Arrays.asList方法返回new ArrayList?400报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

java.util.Arrays.asList方法返回new ArrayList?400报错

爱吃鱼的程序员 2020-06-08 17:35:27 96

那么编译器是如何推断类型参数的呢?

我试着这样写

public class Test {

	
	@SafeVarargs
	@SuppressWarnings("varargs")
	public static <T> List<T> asList(T... a) {
		return new ArrayList<>(a);
	}
	
	private static class ArrayList<E> {
		private final E[] a;
		ArrayList(E[] array) {
			a = Objects.requireNonNull(array);
		}
	}
}



但是报错 Cannot infer type arguments for ArrayList<>

这是什么原因呢?求赐教


补充Arrays的源代码

@SafeVarargs
    @SuppressWarnings("varargs")
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

    /**
     * @serial include
     */
    private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;

        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }

        @Override
        public int size() {
            return a.length;
        }

        @Override
        public Object[] toArray() {
            return a.clone();
        }
<p>
	<br>
</p>
<p>
	<br>
</p>

只粘贴了asList和ArrayList的部分代码

Java 编译器
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-08 17:35:39

    你写代码的报错原因:asList方法的返回值,并不是这个方法声明的返回值的类或子类。

    继承关系都没有,更不用说推断参数类型了。

    写成这样就可以了

    @SafeVarargs@SuppressWarnings("varargs")publicstatic<T>ArrayList<T>asList(T...a){returnnewArrayList<>(a);}

     

    多谢,是这样的
    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程