我需要一个返回兼容服务的服务查找方法。这些特定服务是同一个通用超类的(非泛型)子类,我想使用泛型来确保兼容性。
类:
class BaseDTO
class AaaDTO extends BaseDTO
class BbbDTO extends BaseDTO
interface BaseService<T extends BaseDTO>
interface AaaService extends BaseService<AaaDTO>
interface BbbService extends BaseService<BbbDTO>
我必须在下面的解析器类中的占位符中添加哪些泛型定义?我想表达resolve()
返回与给定对象兼容的服务实现。
public class Resolver {
@Autowired private AaaService aaaService;
@Autowired private BbbService bbbService;
public <T ???> BaseService<???> resolve(T object) {
if (object instanceof AaaDTO) {
return (???) aaaService;
} else if (object instanceof BbbDTO) {
return (???) bbbService;
} else {
throw new IllegalArgumentException();
}
}
}
简单地说我想告诉编译器以下是安全的:
BaseDTO dto = getDtoFromSomewhereElse();
resolver.resolve(dto).foo(dto);
答案 0 :(得分:1)
如果您的方法foo在BaseService
中定义如下:
public void foo(BaseDTO dto);
您可以执行以下操作:
public <T extends BaseDTO> BaseService<T> resolve(T object) {
if (object instanceof AaaDTO) {
return (BaseService<T>) aaaService;
} else if (object instanceof BbbDTO) {
return (BaseService<T>) bbbService;
} else {
throw new IllegalArgumentException();
}
}