我有一个通用的接口,它是由一个类实现的,我想在泛型方法中返回。 接口:用java中的具体实现返回一个通用接口
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 build并不是,并且说“不可转换的类型”。我可以解决这个问题:
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>
配合和工程...感谢大家,但我仍然不知道为什么日食什么也不说......
最后一个比上一个不安全。两者都做同样的事情。如果我执行'actionCoordinatorImpl .getAction(0)'? –
这两个版本看起来都是类型安全的。而'javac'是正确的抱怨。 –
你确定它在Eclipse中有效吗?如果它是一个java问题(和“不可转换的类型”指向它),它应该落在两者中)。 – SJuan76