类<! - extends RetryActionResultDto - >未定义类型CLASS

时间:2013-10-09 11:06:58

标签: java

private Service generateActionResponse(@Nonnull Class<? extends RetryActionResultDto> response) {
        if (response.isSuccess()) {
            ...
        } else if (response.getRetryDecision() {
          ....
        }
    }

public interface RetryActionResultDto extends DTO {

    public RetryDecision getRetryDecision();

    public boolean isSuccess();

}

但我得到例外

  

类型Class

的方法isSuccess()未定义

我能做什么?

4 个答案:

答案 0 :(得分:3)

你的论点是一个类......不是那个类的实例。因此错误。

尝试将其更改为:

private Service generateActionResponse(@Nonnull RetryActionResultDto response) {
    if (response.isSuccess()) {
        ...
    } else if (response.getRetryDecision() {
      ....
    }
}

子类的实例也会通过它。

答案 1 :(得分:1)

private <T> Service generateActionResponse(@Nonnull T extends RetryActionResultDto response) {
    if (response.isSuccess()) {
        ...
    } else if (response.getRetryDecision() {
        ....
    }
}

但是,由于RetryActionResultDto是一个接口,该方法只接受RetryActionResultDto子类型的参数,即使没有泛型。

答案 2 :(得分:1)

您可以重写这个方法定义:

private <T extends RetryActionResultDto> String generateActionResponse(
            T response) {
..
}

表示method参数接受RetryActionResultDto或其子类的实例。

答案 3 :(得分:0)

你在这里想做的是错的。 Class<? extends RetryActionResultDto>Class,而不是实现RetryActionResultDto的类的对象。

如果你想让类已经实现RetryActionResultDto的对象作为参数传递,那么你可以使用

private Service generateActionResponse(@Nonnull RetryActionResultDto response) {

当传递的参数已实现接口时,它将具有在接口中声明的所有方法,并且将在运行时中针对传递的对象调用方法的实际实现。