0

私は:

List<WatchEvent.Kind<Path>> events_kinds = new ArrayList<>();
events_kinds.add(StandardWatchEventKinds.ENTRY_DELETE);
events_kinds.add(StandardWatchEventKinds.ENTRY_CREATE);
events_kinds.add(StandardWatchEventKinds.ENTRY_MODIFY);

register2 番目の引数としてKinds<?>[]型を受け入れるメソッドを使用したいので、次のようにします。

WatchKey key = path.register(watch_service, (WatchEvent.Kind<Path>[]) events_kinds.toArray());

しかし、コードを実行すると、次の例外があります。

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.nio.file.WatchEvent$Kind;

Kinds<?>[]では、そのリストから配列を取得するにはどうすればよいでしょうか?

ありがとう。

4

1 に答える 1

1

次のことを行う必要があります。

WatchEvent.Kind[] eventsArray = events_kinds.toArray(new WatchEvent.Kind[0]);

Adityaのコメントおよびより詳細な説明によると:

toArray(T[]) メソッドに指定された引数は、主に、コレクションの要素を保持するために作成する配列の型を決定するために使用されます。メソッドが別の配列インスタンスを作成するのを避けるために、必要なサイズを持つ配列インスタンスを渡す方がはるかに優れています。Javadoc から:

//@param a the array into which the elements of this list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.
<T> T[] toArray(T[] a);
于 2012-10-12T14:55:28.213 に答える