ジェネリックメソッドで返したいクラスによって実装されるジェネリックインターフェイスがあります。インターフェース:
public interface IWorker<T extends Object, K extends Object> {
public K doWork(T o);
}
実装:
public class WorkerImpl implements IWorker<String, List<Serializable>>
{
@Override
public List<Serializable> doWork(String s)
{
return ...
}
}
実装を返す汎用メソッドの ActionCoordinator インターフェイス:
public interface IActionCoordinator
{
public <T extends Serializable, K extends Serializable> IWorker<T, K> getAction(T request);
}
ActionCoordinator の実装:
public class ActionCoordinatorImpl implements IActionCoordinator
{
@Override
public <T extends Serializable, K extends Serializable> IWorker<T, K> getAction(final T requ)
{
return (IWorker<T,K>)new WorkerImpl();
}
}
問題: Eclipse ではこれは機能しますが、JDK 1.6.0_35 で Maven ビルドを実行しても機能せず、「変換できない型」と表示されます。私はそれで回避できます:
public class ActionCoordinatorImpl implements IActionCoordinator
{
@Override
public <T extends Serializable, K extends Serializable> IWorker<T, K> getAction(final T requ)
{
Object temp = new WorkerImpl();
return (IWorker<T,K>)temp;
}
}
しかし、それは想定されていないことであり、タイプセーフではありません。
いくつかのアイデアはいいでしょう。前もって感謝します...
編集:今私にとってうまくいくのは次のとおりです:
すべての一般的な T と K をシリアライズ可能に変更しました。WorkerImpl を制限するために必要だったのはこれだけです。実際の呼び出し元はまだ必要ですIWorker<T,K>
が、IWorker<Serializable,Serializable>
フィットして機能します...みんなに感謝しますが、Eclipseが何も言わないのはなぜだろうか...