(在 Java 中工作) 我有一个抽象类,在整个类中都有通用类型:
public abstract class ConnectionProcessor<T>
{
public void process()
{
for (List<T> resultsPage : connection)
{
processPage(resultsPage);
}
}
protected abstract void processPage(List<T> resultsPage);
}
我有另一个扩展上述抽象类的类,声明如下:
public class AlbumProcessor<Album> extends ConnectionProcessor
{
@Override
protected void processPage(List resultsPage)
{
//Do stuff here specific to Album
}
}
此声明工作正常,但在 processPage
中我想做Album
- 特定的东西,我尽量避免在不需要时使用它。我希望这是方法声明:
protected void processPage(List<Album> resultsPage)
但这不符合覆盖processPage
的要求来自 ConnectionProcessor
.为什么是这样?我怎样才能得到想要的行为?我认为在 AlbumProcessor
我可以插入 <Album>
无处不在ConnectionProcessor
有<T>
,但事实并非如此。
最佳答案
尝试
//extend prameterized version of ConnectionProcessor<T> with Album as actual type argument
public class AlbumProcessor extends ConnectionProcessor<Album> {
代替
public class AlbumProcessor<Album> extends ConnectionProcessor {
当您执行上述操作时,您正在扩展通用类型的原始版本 ConnectionProcessor<T>
并引入一个新的正式类型参数 - Album
(如 T
)在那种情况下不是实际的类型参数。
关于java - 从抽象类继承泛型类型方法——转换为特定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12716589/