我正在为用户界面编写一些代码。在这段代码中有一个通用接口,如下所示:
public interface DataValue<T>
{
public String getName();
public T getValue();
public String getDescription();
}
现在,此接口由代码中的许多枚举实现,并在悬停事件控制器中用于接口中可由 DataValue 接口表示的值。我意识到这个控制器中有一些警告,所以我没有成功地试图找到一种方法来删除它们。控制器类如下所示:
public class HintController implements ItemHoverHandler
{
private final Class<? extends Enum> theEnumClass;
public HintController(Class<? extends Enum> enumClass)
{
theEnumClass = enumClass;
}
@Override
@SuppressWarnings("unchecked")
public void onItemHover(ItemHoverEvent event)
{
FormItem formItem = event.getItem();
Enum<?> enumValue =
Enum.valueOf(theEnumClass, (String)formItem.getValue());
String prompt = (enumValue instanceof DataValue)
? getPromptForDataValue((DataValue)enumValue)
: null;
formItem.setPrompt(prompt);
}
private String getPromptForDataValue(DataValue<?> dataValue)
{
return "<b>" + dataValue.getName() + "</b><br /><br />"
+ dataValue.getDescription();
}
}
当然,这个实现有一些我无法修复的 rawType 警告。如果我用 ? 通配符它将显示边界异常。我的关闭“尝试”是当我尝试更改字段的类型和构造参数 tom 时,如下所示:
public class HintController implements ItemHoverHandler
{
private final Enum<? extends DataValue<?>> theEnumClass;
public HintController(Enum<? extends DataValue<?>>enumClass)
{
theEnumClass = enumClass;
}
@Override
public void onItemHover(ItemHoverEvent event)
{
FormItem formItem = event.getItem();
Enum<? extends DataValue<?>>enumValue =
Enum.valueOf(theEnumClass.getDeclaringClass(),formItem.getValue().toString());
String prompt = (enumValue instanceof DataValue)
? getPromptForDataValue((DataValue<?>)enumValue)
: null;
formItem.setPrompt(prompt);
}
private String getPromptForDataValue(DataValue<?> dataValue)
{
return "<b>" + dataValue.getName() + "</b><br /><br />"
+ dataValue.getDescription();
}
}
但当然,它失败了,因为我找不到实际发送该类型引用的方法,因为它们是枚举,我无法实例化它们。我认为应该有适当的方法来做到这一点,如果有人可以提供帮助,将不胜感激。谢谢