使用泛型类作为类型参数



我想使用一个泛型类作为另一个泛型类的类型参数。

起初我的类定义是这样的:

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的强制转换。

我将如何实施此类行为?

不要更改类标头,而是将类中使用R的所有位置替换为Bar<R>

因此,类标头保持不变:

class Foo<T, R extends CustomClass> 

但是,假设您有一个类型为R的字段。这需要更改为Bar<R>

Bar<R> someField;

看起来你需要的可能是:

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

你会使用

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

如果Bar是固定的,即如果用户不需要另一个类扩展Bar,那么你需要摆脱R,只在里面使用Bar<T>Foo