我有一個通用的接口,它是由一個類實現的,我想在泛型方法中返回。 接口:用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