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

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

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

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

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

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

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

hec6srdp

hec6srdp1#

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

  1. public class AnotherUser extends Entity {}
  2. public class RequestParserImpl implements RequestParser {
  3. <T extends Entity> Message<T> parseRequest(String json) {
  4. return new Message<AnotherUser>();
  5. }
  6. }

鉴于这将编译:

  1. public class RequestParserImpl implements RequestParser {
  2. Message<? extends Entity> parseRequest(String json) {
  3. return new Message<AnotherUser>();
  4. }
  5. }
展开查看全部

相关问题