10
import java.util.*;

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

asList()java.util.ArraysのOraclesJDK実装から取得されます。

エラーは

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

これはどのように機能しますか?Oracleは、私たちが使用しているのと同じコンパイラを使用します。

4

2 に答える 2

10

注意:クラスで使用される はではArrayListなく、ネストされたクラスです。java.util.Arraysjava.util.ArrayListjava.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ます。diamond 演算子は、テンプレート化された型ではなく、特定の型を推論するように動作することを意図していると思います。

幸いなことに、メソッド全体をテンプレート化したので、次のようにステートメントを作成できます。

      return new ArrayList<T>( a );

そして、すべてがうまくいくでしょう:)。

于 2011-08-16T13:11:43.863 に答える