标签:对象 的区别 lazy sum 错误 nat cti 向上转型 strong
迭代器:
class Employee{ String name; boolean isMale; double money; Employee(String name,boolean isMale,double money){ this.name = name; this.isMale = isMale; this.money = money; } } public class Main { public static void main(String[] args){ Collection<Employee> company = new ArrayList<Employee>(); company.add(new Employee("Tom",true,500)); company.add(new Employee("Bruce",true,40)); company.add(new Employee("Alice",false,123)); company.add(new Employee("Katy",false,250)); company.add(new Employee("Eric",true,123)); Iterator<Employee> it = company.iterator(); double sum = 0; while(it.hasNext()) { Employee temp = it.next();//指针已移动,所以只能定义变量再次取值 if(temp.isMale) { sum+=temp.money; } } System.out.println(sum); } }
泛型的意义:
再多态中,我们用父类引用变量指向子类对象,但是又想使用子类中独有的方法,这就产生了类型转换异常的问题,在前面学习过一种解决类型转换异常的途径:
向下转型时先判断,如果该对象是向上转型前的类型的实例,再向下转型
Java还提供了另一种方案解决这一问题,效果是这样的:
本来你写完程序,你不知道它会出现类型转换异常,结果它跑着跑着崩了
用了泛型后,你写完程序出现类型转换的错误,编都编不过,根本没法跑
作为程序员我们肯定不希望bug出现在用户使用的过程中出现
而是希望问题在开发时就出现
泛型定义写在类名后面,泛型的标识符不一定非得是E或者T
创建类对象时确定泛型:
注意不要按方法重载的思维理解泛型类定义,
比如不能像下面这么做
泛型对象是可以调用Object类的方法的:
<>里定义的类型,在方法作用域里使用
继承中的泛型:
实现中的泛型:
如果泛型名和类名一样,会怎么样?
泛型通配符 ‘?‘:
首先明确:
ArrayList<?>不等价于ArrayList<Object>
这3个类属于同一个类的不同泛型类:ArrayList<Object>、ArrayList<Number>、ArrayList<Integer>他们之间没有继承关系
hashcode与哈希表:
查看Object类的hashCode方法,发现没有方法体
native表示该方法是外部定义的,C语言写的
标签:对象 的区别 lazy sum 错误 nat cti 向上转型 strong
原文地址:https://www.cnblogs.com/lucascube/p/14347075.html