【发布时间】:2011-02-02 13:19:03
【问题描述】:
我需要动态绑定一个参数类型(列表),但我没有正确... 这是我的课程的概述:
public abstract interface SettingsField<A> extends Window
然后我有一些实现 SettingsField 的类:
public class StringSettingsField implements SettingsField<String>
public class MapSettingsField<K, V> implements SettingsField<Map<K, V>>
第一个非常简单,但例如第二个有点棘手......所以我想创建一个返回 SettingsFileds 的工厂。我想使用动态绑定为我要放入的每个对象获取正确的 SettingsWindow。 所以我重载了以下方法getField。 对于 String 来说很简单:
public SettingsField<String> getField(String x){
return new StringSettingsField();
}
但是对于地图我有一些麻烦......
public SettingsField<Map<? extends String, ?>> getField(Map<? extends String, ?> x){
return new MapSettingsField();
}
键始终是字符串是一个例子(也可以是?) 但是现在编译器给了我警告
MapSettingsField 是原始类型。对泛型 MapSettingsField 的引用应该被参数化
但是我怎么能在这里做到这一点?问题只是使用 Map 无效,因为 java 中的 f-generic 存在一些问题(即使 B 是 A 的子类型,List 也不是 List 的隐式子类型)
有什么提示吗?提前致谢!
【问题讨论】:
标签: java generics dynamic-binding