Java泛型方法返回值与入参的子类兼容性相关问题咨询
Java泛型相关问题解答
问题1解答
完全可以。
你声明的方法返回值是List<T>接口类型,ArrayList和LinkedList都是JDK提供的List接口的官方实现类,只要你在方法内部返回这两个类的实例,都符合返回值的类型约束。比如下面两种实现都是合法的:
// 返回ArrayList实例 public <T> List<T> toList(final T... arr) { return new ArrayList<>(Arrays.asList(arr)); } // 返回LinkedList实例 public <T> List<T> toList(final T... arr) { return new LinkedList<>(Arrays.asList(arr)); }
问题2解答
可以正常运行。
方法入参声明的是List<T>接口类型,根据Java的多态规则,所有实现了List接口的类实例都可以作为参数传入,不管是ArrayList、LinkedList还是你自定义的List实现类,只要遵守List接口的规范,方法都可以正常执行。
问题3解答
这个规则是Java多态的核心特性,适用于所有合法的自定义继承结构。
只要你定义的子类是从顶层父类合法派生(父类没有被final修饰、继承没有违反访问权限要求),方法入参声明为顶层父类类型时,所有子类实例都可以直接传入。
需要注意的是,如果方法内部需要调用某个子类独有的方法,必须先做类型校验再强制转换,否则会抛出ClassCastException运行时异常。
内容的提问来源于stack exchange,提问作者Gius
相关产品推荐
相关产品推荐

