1

我需要一个返回兼容服务的服务查找方法。这些特定服务是同一个泛型超类的(非泛型)子类,我想使用泛型来确保兼容性。

课程:

  • 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);
4

1 回答 1

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();
        }
    }
于 2012-04-25T10:07:09.843 回答