泛型的思考

先上代码:
class DataModel {

private int total;
private List<Object> rows;

public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List<Object> getRows() {
return rows;
}
public void setRows(List<Object> rows) {
this.rows = rows;
}

}

public class Client {
public static void main(String[] args) {
List list = new ArrayList<Person>();
List<Person> list1 = new ArrayList<Person>();

Person p1 = new Person();
list.add(p1);
Object o = new Person();
list1.add((Person)o);

DataModel data = new DataModel();
data.setRows(list1);
data.setRows(list);
}
}


再上图:
[img]http://dl2.iteye.com/upload/attachment/0093/2112/9f6fbba7-1b12-379b-97f5-d002fbbd9581.png[/img]

问题:
1. 告警原因:没有对List这个接口进行泛型参数化
2. 错误提示原因:The method setRows(List<Object>) in the type DataModel is not applicable for the arguments (List<Person>)
3. 尝试思路1:多态中向上转型必须现有向下转型,注释代码就是尝试,依然报错
4. 泛型无法识别继承关系?
回答3,4:泛型中不支持继承关系。道理很简单看一段代码:
List<Apple> apple = new ArrayList<apple>();
List<Fruit> fruit = new ArrayList<Fruit>();

当用fruit接收apple的时候会发生什么,apple不仅仅是苹果了,apple可能是西瓜,橘子,香蕉了。再举个例子:你去商场买了一件短袖,难道商场的所有的东西都是可能是你的么?对象范围扩大了!所以报错是一定的。有没有可能任意都可以接收,可能。通配符!
5. 为什么27行的list可以调用setRows?
List list = new ArrayList<Person>();

这个也是可行的,ArrayList是否泛型参数化有什么影响?
回答:缺省泛型,java可以接收,当做object处理,程序出现报警。
6. 27行的list可以接受任意类型的对象,那为什么一定要引入泛型?泛型的作用是什么?
回答:泛型是基础,泛型是通配符的具体表现形式,通配符是为了更抽象化。
7. 泛型来自于C++的模板,是不是要把C++中的模板搞清楚?
没时间,项目间隙好好看看。
8. 问题偶然发现于Json数据的后台封装,Ext中store中的JsonReader配置totalProperty和root,对应一个Javabean就可以从后台获取数据到前台,数据是何时写入到response中的?而对于TreeLoader的dataUrl,如果去读txt文件,jsp文件,js文件是可以写入到树结构中的,但是通过action到后台的话,需要通过servlet的response.getWriter()拿到字节输出流,显示的调用write()函数,否则response的响应值为null,树结构无法生成,为什么?
回答:特别2的问题,action类要提供成员变量,并且提供get和set方法,这样写入response的工作就交给struts了,而不用自己维护。百度struts结构图,一目了然。
9. 太忙,还没有细致的去调查原因,先记录问题,手头事情忙完再来续写这篇博客。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值