Iterator<String> it = c.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
泛型类
Student类
public class Student {
private String name;
public Student(){};
public Student(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
Teacher类
public class Teacher {
private Integer age;
public Integer getAge(){
return age;
}
public void setAge(Integer age){
this.age = age;
}
}
主程序
public class GenericDemo {
public static void main(String[] args) {
Student s = new Student();
s.setName("林青霞");
System.out.println(s.getName());
Teacher t = new Teacher();
t.setAge(30);
System.out.println(t.getAge());
}
}
Generic<Boolean> g3 = new Generic<Boolean>();
g3.setT(true);
System.out.println(g3.getT());
泛型方法
定义了一个Generic类,里面有是三个show方法。方法名相同,参数列表不同,这叫方法的重载。
public class Generic {
public void show(String s){
System.out.println(s);
}
public void show(Integer i){
System.out.println(i);
}
public void show(Boolean b){
System.out.println(b);
}
}
接下来创建这个类的对象,测试他的方法。
public class GenericDemo {
public static void main(String[] args) {
Generic g = new Generic();
g.show("林青霞");
g.show(30);
g.show(true);
}
}
假如给个12.34就会报错,因为这里没有提供对应方法参数的调用
可以用泛型类进行改进
public class Generic<T>{
public void show(T t){
System.out.println(t);
}
}
定义类型
Generic<String> g1 = new Generic<String>();
g1.show("林青霞");
Generic<Integer> g2 = new Generic<Integer>();
g2.show(30);
Generic<Boolean> g3 = new Generic<Boolean>();
g3.show(true);
public class GenericImpl<T> implements Generic<T> {
@Override
public void show(T t){
System.out.println(t);
}
}
测试一下
public class GenericDemo {
public static void main(String[] args) {
Generic<String> g1 = new GenericImpl<String>();
g1.show("林青霞");
Generic<Integer> g2 = new GenericImpl<Integer>();
g2.show(30);
}
}
import java.util.ArrayList;
import java.util.List;
public class GenericDemo {
public static void main(String[] args) {
//类型通配符
List<?> list = new ArrayList<Object>();
List<?> list2 = new ArrayList<Number>();
List<?> list3 = new ArrayList<Integer>();
}
}
上限限定的是最高或者最大的类型,子类型是可以的
//类型通配符上限,<? extends 类型>
// List<? extends Number> list4 = new ArrayList<Object>();
List<? extends Number> list5 = new ArrayList<Number>();
List<? extends Number> list6 = new ArrayList<Integer>();
类型通配符下限,Integer报错,比它更小的类型肯定是不行的。
//类型通配符下限,<? super 类型>
List<? super Number> list7 = new ArrayList<Object>();
List<? super Number> list8 = new ArrayList<Number>();
List<? super Number> list9 = new ArrayList<Integer>();
可变参数
public class ArgsDemo01 {
public static void main(String[] args) {
System.out.println(sum(10,20));
System.out.println(sum(10,20,30));
System.out.println(sum(10,20,30,40));
}
public static int sum(int a,int b){
return a + b;
}
public static int sum(int a , int b, int c){
return a + b + c;
}
public static int sum(int a ,int b, int c, int d){
return a + b + c + d;
}
}
在main方法中调用了这三个sum方法,输出在了控制台。
假如还需要求和50 60 70,则需再提供三个方法,分别求5个6个7个的和。这样太麻烦
public class ArgsDemo01 {
public static void main(String[] args) {
System.out.println(sum(10,20));
System.out.println(sum(10,20,30));
System.out.println(sum(10,20,30,40));
}
public static int sum(int a,int b){
return a + b;
}
public static int sum(int a , int b, int c){
return a + b + c;
}
public static int sum(int a ,int b, int c, int d){
return a + b + c + d;
}
}
有没有办法用一个方法就实现这样数据的求和呢?可以使用可变参数。
可变参数又称做参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了。
格式:修饰符 返回值类型 方法名(数据类型... 变量名){ }
public static int sum(int... a){ }
用可变参数写一个方法
public static void main(String[] args) {
System.out.println(sum(10,20));
System.out.println(sum(10,20,30));
System.out.println(sum(10,20,30,40));
System.out.println(sum(10,20,30,40,50));
System.out.println(sum(10,20,30,40,50,60));
System.out.println(sum(10,20,30,40,50,60,70));
}
public static int sum(int... a){
return 0;
}
写了可变参数之后,那几个求和 50 60 70 的输出语句就可以使用了
假如把之前写的sum方法注释掉,也没有报错。说明他可以接受所有方法的参数。
我们来输出一下这个a是什么,是int类型的数组。他把每一个参数的数据都给封装到一个数组里面来了。
public static int sum(int... a){
System.out.println(a);
return 0;
}
既然a是一个数组,想把数组里面的元素拿出来求和,就比较容易了。
public static int sum(int... a){
// System.out.println(a);
// return 0;
int sum = 0;
for(int i : a){
sum += i;
}
return sum;
}