600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java 类型通配符_java中泛型之类型通配符(?)

java 类型通配符_java中泛型之类型通配符(?)

时间:2020-07-01 14:57:26

相关推荐

java 类型通配符_java中泛型之类型通配符(?)

实体类

package cn.xy.model;

/**

* 生物类

* @author xy

*

*/

public class Living

{

private String name;

public Living(String name)

{

super();

this.name = name;

}

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

@Override

public String toString()

{

return name;

}

}

/**

* 动物类

* @author xy

*

*/

public class Animal extends Living

{

public Animal(String name)

{

super(name);

}

}

/**

* 猫类

* @author xy

*

*/

public class Cat extends Animal

{

public Cat(String name)

{

super(name);

}

}

/**

* 狗类

* @author xy

*

*/

public class Dog extends Animal

{

public Dog(String name)

{

super(name);

}

}

测试类1

import java.util.ArrayList;

import java.util.List;

import cn.xy.model.Animal;

import cn.xy.model.Cat;

import cn.xy.model.Dog;

import cn.xy.model.Living;

public class Test

{

/**

* 虽Cat和Dog是Animal的子类,但List和List不是List的子类

*直接为该方法传入List和List编译会错误 。

* 如List不是List的子类一样。

*/

public static void GetNames1(List animals)

{

for (Animal a : animals)

{

System.out.println(a.getName());

}

}

/**

* 该方法使用类型通配符,可以使用任何类型的List来调用它,其类型均为Object

*/

public static void GetNames2(List> animals)

{

for (Object obj : animals)

{

Animal a = (Animal) obj;

System.out.println(a.getName());

}

}

/**

* 该方法设置了类型通配符的上限,即传入的List的类型必须是Animal的子类或者Animal本身

*/

public static void GetNames3(List extends Animal> animals)

{

for (Animal a : animals)

{

System.out.println(a.getName());

}

}

/**

* 该方法设置了类型通配符的下限,即传入的List的类型必须是Animal的父类或者Animal本身

*/

public static void GetNames4(List super Animal> animals)

{

for (Object a : animals)

{

System.out.println(a);

}

}

public static void main(String[] args)

{

List cats = new ArrayList();

cats.add(new Cat("Tomcat"));

cats.add(new Cat("Tomcat2"));

List dogs = new ArrayList();

dogs.add(new Dog("Tomdog"));

dogs.add(new Dog("Tomdog2"));

List livings = new ArrayList();

livings.add(new Living("living1"));

livings.add(new Living("living2"));

// GetNames1(cats);

// GetNames1(dogs);

GetNames2(cats);

GetNames2(dogs);

GetNames3(cats);

GetNames3(dogs);

// GetNames4(cats);

// GetNames4(dogs);

GetNames4(livings);

}

}

测试类2

import java.util.ArrayList;

import java.util.List;

public class Test2

{

/**

* 添加的对象必须是和?一样的类型或者是其子类,但并不知道?是什么类型 所以lst.add会产生编译错误,故不能向其中添加对象

* null值是一个例外,因为null是所有引用类型的实例

*/

public static void main(String[] args)

{

List> lst = new ArrayList();

// lst.add("str");

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。