难以理解Java规范
阅读
Java SE规范中的参考类型转换时:
我一直在寻找以下条件:
有谁能举个例子说明这种情况? 编辑: 为了进一步澄清我引用的文章,请参阅本link的第5.5.1节 解决方法
条件的第一部分要求S<:T:S:> T,即一个类必须继承另一个类;否则会出现编译时错误.所以你的基本设置如下:
class T { } class S extends T { } 到目前为止一直很好:允许你将S转换为T,因为这两个类之间存在适当的子类关系. 现在让我们看看条件的第二部分:两个类必须具有不同的超类型.由于只允许一个超类,因此常见的超类需要是一个接口.以下是如何打破规则的第二部分的一个示例: // X is List<String> class T implements List<String> { } // Y is List<Integer> class S extends T implements List<Integer> { } X和Y的擦除需要实现List< ???>,但是列表必须在不同类型上参数化.这会导致编译时错误,因为S无法同时满足List< String>和列表<整数>接口. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |