开发者社区> 问答> 正文

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

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

我试着这样写

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的部分代码

展开
收起
爱吃鱼的程序员 2020-06-08 17:35:27 781 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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

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

    写成这样就可以了

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

     

    多谢,是这样的
    2020-06-08 17:35:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载