4

私はJavaを初めて使用します...基本的に文字列、int、浮動小数点などの他のオブジェクトのコンテナであるDLPFileというクラスを作成しました。

ファイルを List に入れ、それをセッション (Map クラスからのもの) 変数に保存するのは簡単です。

DLPFile file = new DLPFile();
List <DLPFile >fileList =  new ArrayList <DLPFile>();
fileList.add(file);
session.put("filesList", fileList);

しかし、セッション変数からリストを取得するにはどうすればよいですか? 私がする時:

List <DLPFile files = (List) session.get("fileslist");

私はいくつかの警告を受けました:

"List is a raw type.References to generic type List<E> should be parameterized."

私は試した

List <DLPFile files = (List <DLPFile> ) session.get("fileslist");   
List <DLPFile files = (List ) session.get("fileslist")<DLPFile>; and
List <DLPFile files = (List) <DLPFile>  session.get("fileslist");

しかし、どれも機能しません

これは一種の「キャスティング」の問題だと思います...(多分?)

前もって感謝します ;)

4

5 に答える 5

3

これは、Generics Type の消去によるものです。コンパイラは、セッションからジェネリック型引数を取得するときに、実際のジェネリック型引数を決定する方法がありません (session.get が Class<T> 引数を使用してそれに応じてキャストする場合を除く)。これは、セッションがおそらくオブジェクトの型のみを返すためです。オブジェクトが List のインスタンスであることを確認できますが、ジェネリック型の情報は失われます (基本的に、コンパイラはそれを内部で List<Object> に変換します)。キャスト先のジェネリック型パラメーターが正しいかどうかを知ることができるのはプログラマーであるあなただけなので、警告が表示されるのはそのためです。

警告が気に入らない場合は、追加できます

@SuppressWarnings("unchecked")

メソッドの先頭にある注釈。

于 2009-08-31T08:23:11.540 に答える
2

先頭に > がないことに気づいていますか? つまり、'List <DLPFile files' は 'List <DLPFile>' files' である必要があります。

于 2009-08-31T08:16:41.023 に答える
2

このオプションは問題ないはずです

List <DLPFile> files = (List <DLPFile>) session.get("fileslist"); 

あなたのセッションがMap<String, List<DLPFile>>.

Java Generics FAQ http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.htmlに目を通してください。

于 2009-08-31T08:20:49.733 に答える
1

最初に試したオプションは、必要なものです。

List<DLPFile> files = (List<DLPFile>) session.get("fileslist");

最初に表示される警告は、ジェネリックとは関係ありません。たとえば、キャストするときにも警告が表示Stringされます。コンパイラは、返されたオブジェクトがList<DLPFile>.

2 つ目は生の型に関するもので、ジェネリックに関係しています。上記のオプションを使用すると取得されないはずですが、 justListにキャストすると取得されます。Listあなたのケースでは、型パラメータなしで使用すべきではないことを示しています<DLPFile>

于 2009-08-31T08:31:09.497 に答える
0

他の人が言ったように、Java ではジェネリック型を安全にキャストできません。

この問題を解決するには、コンパイラを無視するよりも、もう少し意味のあるものをセッションに追加することをお勧めします。Listこの種の型のコレクションを処理するクラスに をラップします。メソッドではなく、リストに対して意味のあることを行ういくつかのインスタンス メソッドを追加することもできますgetFiles

于 2009-08-31T08:43:42.810 に答える