リストの要素のプロパティの 1 つを使用List
して a を aに変換するこのメソッドがあります。Map
要するに、次のようになります。
private Map<String, List<Diagnostic<? extends JavaFileObject>>> toMap( List<Diagnostic<? extends JavaFileObject>> diagnostics ) {
Map<String, List<Diagnostic<? extends JavaFileObject>>> result = new HashMap<String, List<Diagnostic<? extends JavaFileObject>>>();
for ( Diagnostic<? extends JavaFileObject> d : diagnostics ) {
List<Diagnostic<? extends JavaFileObject>> list = null;
if ( !result.containsKey( d.getCode() ) ) {
list = new ArrayList<Diagnostic<? extends JavaFileObject>>();
result.put( d.getCode(), list );
} else {
list = result.get( d.getCode() );
}
assert list != null;
list.add( d );
}
return result;
}
イヤッ!..
私はジェネリックが大好きで、以前は Java を使用していましたが、キャストエブリシングの時代には戻りたくありませんが、ジェネリックにジェネリック要素が要素として含まれていると、問題が発生します。
Java1.7 では " diamond " 演算子を使用できることはわかっていますが、別の方法があるはずです。
これは、非汎用バージョンでは次のようになります。
private Map toMap( List diagnostics ) {
Map result = new HashMap();
for( Object o : diagnostics ) {
Diagnostic d = ( Diagnostic ) o;
List list = null;
if( !result.containsKey( d.getCode() ) ) {
list = new ArrayList();
result.put( d.getCode() , list );
} else {
list = result.get( d.getCode() );
}
assert list != null;
list.add( d );
}
return result;
}
おおよそ、私はそれをコンパイルしようとしませんでした。
他の言語はこれをどのように処理しますか? たとえば C#?、Scala? 私は SML や Haskell が処理する方法がとても気に入りましたが、あまりにも多くの魔法が害を及ぼす可能性があると思います (ただし、これはもちろん主観的です)
これに対する回避策はありますか?