我有一个像这样的界面

public interface Reader<T> {
    T read(Class<T> type,InputStream in);
}

它是一个通用接口,用于从流中读取类型为T的对象。 然后我知道我要处理的所有对象都是子类,让我们说S。 所以我创造了这个

public class SReader implements Reader<S>{
    S read(Class<S> type, InputStream in){
        // do the job here
    }
}

但是,即使S1S的子类, Class<S1>也不能分配给Class<S> 我该如何优雅地实现这一点? 有界类型参数? 我不是这么想的。 我唯一的解决方案就是删除类型参数

public class SReader implements Reader{
    // the other stuff
}

===============>>#1 票数:8 已采纳

这听起来像你想要的

public interface Reader<T> {
    T read(Class<? extends T> type,InputStream in);
}

  ask by George translate from so

未解决问题?本站智能推荐:

3回复

如何在Java中实现泛型方法

我需要重写此方法: 问题是我不知道为什么。 我不明白什么是<T> 。 我尝试重写它,并用String类替换T: 但这给我错误: 所以现在我真的很困惑。 有人可以向我解释一下,并举例说明如何返回一些值吗?
3回复

用Java中的泛型方法覆盖泛型方法

Angelica Langer在她关于泛型的常见问题解答中说(见Technicalities.FAQ822 ): 如果方法具有不同边界的类型参数,则它们不会覆盖,因为这些方法具有不等于覆盖的签名。 请记住,类型参数边界是泛型方法签名的一部分。 示例(通用子类型方法重载泛型超类
2回复

为什么接口的泛型方法可以在Java中实现为非泛型?

假设我们有一些像这样的测试接口/类: 您可以看到Animal.eat是一个带约束的通用方法。 现在我的Human类是这样的: 编译好。 您可以看到Human.eat受到的约束比Animal.eat因为Eatable接口丢失了。 Q1:为什么编译器不抱怨这种不一致?
3回复

如何在Java中调用通配符类型的泛型方法?

我发现我不能调用通配符类型的泛型方法而且不明白为什么?
1回复

如何在Java中创建泛型方法?

我有以下方法: 我想使它成为一种通用方法,这样我就不需要为每个新的自定义类型编写新代码。 我可以这样做,这需要在调用update()之前实例化对象: 出于好奇,我想知道是否有办法使用Java Generics做到这一点: 有没有办法在Java中实现这一目标?
2回复

如何在Java中编写泛型方法

我是Java的新手,我需要在Java6中编写泛型方法。 我的目的可以用以下C#代码表示。 有人能告诉我如何用Java编写它吗?
3回复

如何在java泛型方法中初始化实例

我有这个代码: 我称之为: 只是因为我不知道如何构造一个实例。 我会比较喜欢: 有没有办法重构我的原始代码?
2回复

推断Java中的泛型方法

我有以下情况,如果我有Class<? extends IModel<?>> aCls Class<? extends IModel<?>> aCls和集合Collection<? extends IModel<?>> en
4回复

Java中的泛型方法

我的问题是:是否有可能制作一种通用方法,我可以使用2种不同的类型? 例如整数和字符串。 这没有实际用途,但我想知道它是否可行。 如果是的话,怎么样? :)
3回复

java中的枚举和泛型方法

我仍然遇到java泛型系统中的一些极端情况的问题。 我有这种方法(我只对签名感兴趣): (想想一个接口,其实现有时会提取一个EnumSet,有时一个实现提取一个JComboBox等) 我想用在运行时获得的类调用它,所以我只是这样调用它: 我收到一条奇怪的错误信息:发现