我想创建一个函数来获取Class的参数并返回T的实例,
所以我有这个签名:
public <T> T foo(Class<T> clazz) {}
Run Code Online (Sandbox Code Playgroud)
现在,假设我想限制Class<T>并仅接受<T extends Command>,所以我尝试了这个:
public <T> T foo(Class<T extends Command> clazz) {}
Run Code Online (Sandbox Code Playgroud)
但是,我的班级Command也是模板如下:Command<S extends ModuleContex>
所以我试试这个:
public <T> T foo(Class<T extends Command<S extends ModuleContext>> clazz) {}
Run Code Online (Sandbox Code Playgroud)
但这不编译!
如何正确写?
泛型类或方法的类型参数的界限取决于type参数,而不是使用type参数:
public <T extends Command> T foo(Class<T> clazz) {}
Run Code Online (Sandbox Code Playgroud)
如果Command本身也是通用的,你可以这样做:
public <S, T extends Command<S>> T foo(Class<T> clazz) {}
Run Code Online (Sandbox Code Playgroud)
如果你想在S上绑定,你也可以这样做:
public <S extends ModuleContext, T extends Command<S>> T foo(Class<T> clazz) {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |