使用泛型类作为类型参数

3

我希望将一个通用类作为另一个通用类的类型参数。

最初,我的类定义是这样的:

class Foo<T, R extends BaseDto> {}

我的需求发生了变化,我必须使用一个包装类/持有者类来存储我的 R 类型。

目前为止我的尝试:(在 Bar<R> 上给出了编译时错误:需要类或接口)

class Bar<T extends BaseDto> {
    private T dto;
    public Bar(T dto) {
        this.dto= dto;
    }
    // getters and setters
}
class Foo<T, Bar<R>> {
    private T entity;
    private R dto;
    // getters and setters
}

我不能将其用作Foo<T, Object>,因为这样使用此类的客户端将不知道他们实际上需要从ObjectBar的转换。

我应该如何实现这种行为?


1
这里的每个回答者似乎都对问题有不同的理解...我建议您发布更多的代码,展示您期望类在需求更改前后如何工作。 - Sweeper
3个回答

3

不要更改类头,而是在类中使用R的所有位置上用Bar<R>来替换。

因此,类头保持不变:

class Foo<T, R extends CustomClass> 

假设您有一个类型为R的字段。需要将其更改为Bar<R>:

Bar<R> someField;

我之前尝试过这个,但在我的情况下没有成功。经过阅读您的答案后,我再次尝试并发现错误是出在我这边。解决方案是将字段类型从R改为Bar<R> - ardatosun

0

看起来你需要的可能是:

class Foo<T, R extends CustomClass, S extends Bar<R>>

0

您将会使用

class Foo<T extends CustomClass, R extends Bar<T>> {}

如果Bar是固定的,即用户不需要另一个扩展Bar的类,则需要摆脱R并在Foo内部仅使用Bar<T>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接