在编码中遇到一个问题
A extends B.
把List<A>作为参数调用参数类型声明为List<B>的方法,编译器报错。
按照我的理解,不应该出现这样的情况啊,莫非编译器进行泛型类型检查时,没有检查继承?
A extends B.
把List<A>作为参数调用参数类型声明为List<B>的方法,编译器报错。
按照我的理解,不应该出现这样的情况啊,莫非编译器进行泛型类型检查时,没有检查继承?
解决方案 »
- net.sf.json.JSONException: Expected a ',' or '}' at character 65 of
- 怎样配置spring事务的隔离级别?????????????
- tomcat的线上环境内存占了2.2G。。。
- 一个formbean问题
- struts 中的org.apache.jasper.JasperException:错误
- iBatis 能不能在改了 sqlMap 文件中的查询语句而不重启应用
- hibernate连接数据库问题
- 有谁知道loadrunner怎么使用???
- 请教关于用JAXP创建XML文档的一个问题,有用过的兄弟进来看一下
- 想找研究EAI的朋友共同探讨
- 菜鸟请教
- swing的JPanel不能添加组件
真的可以吗?List<B> 装A才可以哦java之上塑造型:子类对象可以指向父类引用
楼主,可不能颠倒噢
粘代码,可能List<A>,List<B>弄反了。
class B{}
class A extends B{}
class C{
public static void doSomething(List<B> args){
} public static void main(String[] args){
List<A> a = new ArrayList<A>();
C.doSomething(a);
}
}
代码就是这样的 编译报错
List<B> a = new ArrayList<B>();
C.doSomething(a);
你可以这样啊,这个 a一样的可以增加类型为A的对象,而且doSomething要求的参数也只是List<B>,再者泛刑是指的List<T>,这个T啊,并不是指List本身,List只是装泛型对象的一个容器。如果你doSomething可以定义为doSomething(List<?> list),如果你确实需要只有B及B的子类才能调用此方法,你可以定义为
<T extends B> void doSomething(List<T> args)
这样好像真的不可以。
你还是创建List<B>吧,再往里面添加A不是一样的嘛
import java.util.List ;
import java.util.ArrayList ;
class B{}
class A extends B{}
public class C{
public static void doSomething(List<? extends B> args){
} public static void main(String[] args){
List<A> a = new ArrayList<A>();
C.doSomething(a);
}
}
所有继承于B的 和B都可以
class B{}
class A extends B{}
class C{
public static void doSomething(List<B> args){
} public static void main(String[] args){
List<A> a = new ArrayList<A>();
C.doSomething(a);
}
}你这里静态方法 访问非静态类 需要new出来,不是继承报错吧,C类加上static 修饰应该就不报错了撒