为什么泛型和通配符类型输出的结果不同
Why different result outputs between the generic type and wildcard type
我知道泛型和通配符类型有什么区别,
但是在这种情况下我不能再用同样的方式去理解了。
简而言之,比较下面的两个接口
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);
使用通配符?
不能成功
那么在这种情况下它们之间到底有什么区别...?
因为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>();
}
}
我知道泛型和通配符类型有什么区别, 但是在这种情况下我不能再用同样的方式去理解了。
简而言之,比较下面的两个接口
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);
使用通配符?
不能成功
那么在这种情况下它们之间到底有什么区别...?
因为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>();
}
}