ユーザー インターフェイスのコードをいくつか作成しています。このコードには、次のような汎用インターフェイスがあります。
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 警告がいくつかあります。フィールドを ? でパラメータ化すると、? ワイルドカードを使用すると、境界例外が表示されます。私の最後の「試み」は、フィールドのタイプと構築パラメーターを次のように変更しようとしたときでした。
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();
}
}
しかしもちろん、そのタイプの参照を実際に送信する方法が見つからなかったため、失敗しました。これらは列挙型であり、インスタンス化できないためです。これを行う適切な方法があるはずだと思いますが、誰かが助けてくれればありがたいです。ありがとう