10
import java.util.*;

public class SimpleArrays
{
  @SafeVarargs
  public static <T> List<T> asList( T... a )
  {
    return new ArrayList<>( a );
  }
}

asList()取自 java.util.Arrays 的 Oracles JDK 实现。

错误是

error: cannot infer type arguments for ArrayList<>
    return new ArrayList<>( a );
1 error

这怎么行?Oracle 使用与我们相同的编译器。

4

2 回答 2

10

注意:类中ArrayList使用的java.util.Arrays不是java.util.ArrayList,而是嵌套类java.util.Arrays.ArrayList

特别是,这个类有一个构造函数,它接受一个T[]作为参数,而java.util.ArrayList没有。

也复制这个类,它会起作用。

于 2011-08-16T14:06:46.153 回答
3

据我所知,Eclipse 想要找到一种特定类型来推断模板化的ArrayList. 例如,如果您的方法的签名是:

public static List<Integer> asList( Integer... a )

Eclipse 推断 的类型没有问题ArrayList<>( a ),并且推断其类型是Integer。我相信菱形运算符的意思是这样操作:推断特定类型,而不是模板类型。

幸运的是,您已经对整个方法进行了模板化,因此您可以这样形成您的语句:

      return new ArrayList<T>( a );

一切都会奏效:)。

于 2011-08-16T13:11:43.863 回答