类对象的通用类型规范

时间:2010-07-19 15:16:22

标签: java generics

我正在使用HashMap和下面显示的方法来跟踪类类型的更改侦听器。 IDE正在发出警告

[rawtypes] found raw type: java.lang.Class
  missing type parameters for generic class java.lang.Class<T>. 

需要指定哪种类型的类来解决警告?

private HashMap<Class, Set<ChangeListener>> classChangeListeners;

/**
 * Adds a ChangeListener to the listener list for the specified class type. The class type
 * specified must be a subclass of {@link BusinessObject}.
 *
 * @param  <T>  the type of BusinessObject.
 * @param  cls  the class type.
 * @param  listener  the ChangeListener to be added.
 */
public <T extends BusinessObject> void addChangeListener(Class<T> cls, ChangeListener listener)
{
 if (!classChangeListeners.containsKey(cls))
 {
  classChangeListeners.put(cls, new TreeSet<ChangeListener>());
 }

 classChangeListeners.get(cls).add(listener);
}

1 个答案:

答案 0 :(得分:5)

如果您不想指定所使用的特定Class es的类型,则可以使用Class<?>代替raw type Class。< / p>

在某些情况下,您需要对其进行通配,Class<? extends BusinessObject>或对其进行参数化,Class<T> - 但通常Class<?>就足够了,并且很难推断出您真正想要的内容一个简短的片段。

此外,您似乎正在使用包含集合的地图。您可以考虑使用内置此功能的Multimap并使其更好用。