我有一个由类实现的通用接口,我想以通用方法返回。界面:
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;
}
}
但它不应该是,那根本不是类型安全的。
一些想法会很好。提前致谢...
编辑:现在对我有用的是:
我将所有通用 Ts 和 Ks 更改为可序列化。这就是我需要限制 WorkerImpl 的全部内容。实际的调用者仍然需要一个IWorker<T,K>
但IWorker<Serializable,Serializable>
适合并且可以工作...谢谢大家,但我仍然想知道为什么 eclipse 什么也没说...