Javaジェネリックスとコレクションに関する質問があります。あなたのコードの残りの部分を壊す心配List
のタイプを変更していない可能性があるためJavaジェネリックスとコレクション
List<String> catNames = new ArrayList<String>();
:このようなコレクションを宣言することは良い習慣と考えられています。私はこれを行うにしようとすると、しかし:
private static Map<IssueType, List<Issue>> orphanedAttrMap = new HashMap<IssueType, ArrayList<Issue>>();
javac
はまた
Type mismatch: cannot convert from HashMap<ResultsAggregator.IssueType,ArrayList<Issue>> to HashMap<ResultsAggregator.IssueType,List<Issue>>
を文句を、これは完全に合法である:さらに混乱思わ
private static Map<IssueType, List<Issue>> orphanedAttrMap = new HashMap<IssueType, List<Issue>>();
、List
はインターフェイスであるため、具体的なクラスではありません。何が起きてる?これはタイプ消去の問題ですか?
しかし、それが「優れた実践」と考えられる最初のケースでは当てはまりませんか? –
ああ、私はそれを得る、それは奇妙なことだ... –
@Amir:いいえ、そうではありません。最初の行は 'List'型の1つの変数を宣言しています。その変数に他のリストを後で割り当てると、インスタンスが完全に置き換えられます。 'ArrayList'の中で*何かを変更していません。あなたはその行で何か悪いことをすることはできません。 –