为什么泛型类型和通配符类型的结果输出不同

xkftehaa  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(434)

我知道泛型类型和通配符类型之间的区别,但是在这种情况下,我不能再次使用相同的方法来理解。
简而言之,比较下面的两个接口

public interface RequestParser {
    <T extends Entity> Message<T> parseRequest(String json);
}
public interface RequestParser {
    Message<? extends Entity> parseRequest(String json);
}

只有第一个可以编译以下代码:(user extends entity)

Message<User> message = requestParser.parseRequest(json);

一个使用通配符 ? 不能成功。
那么,在这种情况下,他们之间到底有什么区别。。。?

hec6srdp

hec6srdp1#

是因为 Message<User> 不是的子类 Message<? extends Entity> .
这个问题在尝试实施时会更加明显 RequestParser .
这将失败,没有一个演员,因为 T 不一定 AnotherUser :

public class AnotherUser extends Entity {}

public class RequestParserImpl implements RequestParser {
    <T extends Entity> Message<T> parseRequest(String json) {
         return new Message<AnotherUser>();
    }
}

鉴于这将编译:

public class RequestParserImpl implements RequestParser {
    Message<? extends Entity> parseRequest(String json) {
         return new Message<AnotherUser>();
    }
}

相关问题