c# – 我们可以用Java中的泛型做些什么来使它们看起来更好:
发布时间:2020-12-15 18:03:03 所属栏目:百科 来源:网络整理
导读:我有这个方法使用列表元素的一个属性将List转换为Map: 简而言之,它看起来像这样: private MapString,ListDiagnostic? extends JavaFileObject toMap( ListDiagnostic? extends JavaFileObject diagnostics ) { MapString,ListDiagnostic? extends JavaFile
我有这个方法使用列表元素的一个属性将List转换为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; } Yiack!.. 我非常喜欢genercis,我之前使用java并且我不想回到演员阵容的所有时代,但是当一个泛型包含作为元素的通用元素时,它会变得混乱. 我知道在Java1.7中我们将能够使用“菱形”运算符,但应该有另一种方法. 这是非通用版本的样子: 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处理的方式,但我认为太多魔法可能会受到伤害(但这当然是主观的) 这有解决方法吗? 解决方法
您定义了一个名为T的类型参数.然后您可以在通用中使用T,如下所示:
private <T extends JavaFileObject> Map<String,List<Diagnostic<T>> toMap(List<Diagnostic<T> diagnostics) { Map<String,List<Diagnostic<T>> result = new HashMap<String,List<Diagnostic<T>>(); for (Diagnostic<T> d : diagnostics ) { List<Diagnostic<T>> list = null; if ( !result.containsKey(d.getCode())) { list = new ArrayList<Diagnostic<T>>(); result.put( d.getCode(),list ); } else { list = result.get( d.getCode() ); } assert list != null; list.add( d ); } return result; } 上面你将看到定义为< T extends JavaFileObject>的类型参数.并且您可以在任何需要的地方重复使用T.这将使它更清洁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |