实体类

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");

}

}

java 类型通配符_java中泛型之类型通配符(?)相关推荐

  1. java 文件通配符_Java中泛型通配符的使用方法示例

    本文实例讲述了Java中泛型通配符的使用方法.分享给大家供大家参考,具体如下: 一 点睛 引入通配符可以在泛型实例化时更加灵活地控制,也可以在方法中控制方法的参数. 语法如下: 泛型类名 extend ...

  2. java 继承示例_Java中的继承类型以及示例

    java 继承示例 Prerequisite: Inheritance and its implementation in Java 先决条件: 继承及其在Java中的实现 Java中的继承类型 (T ...

  3. java double 计算_Java中的Double类型计算

    一.问题的提出: 如果我们编译运行下面这个程序会看到什么? public class Test{ public static void main(String args[]){ System.out. ...

  4. java 鸭子类_Java中实现鸭子类型机制

    "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子."[引用维基] 一般而言,鸭子类型机制常见/用于动态语言,如Python.Ruby.JS.来 ...

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

    实体类 package cn.xy.model; /** * 生物类 * @author xy * */ public class Living { private String name; publ ...

  6. java枚举类型定义_java中的枚举类型怎么定义?

    展开全部 Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自62616964757a686964616fe59b9ee7ad9431333236366331己的变量, ...

  7. java类加密_Java中常用加密类型

    1.对称加密 image.png 密钥:加解密钥相同 缺点:无法确保密钥被安全传递 常用算法:DES.3DES(TripleDES).AES等 2.非对称加密 image.png image.png ...

  8. Java如何给Mysql中插入year类型数据

    文章目录 Java如何给Mysql中插入year类型数据 实际问题: 解决方案: 从数据库中读取year类型数据到Java 从Java中往数据库存储year数据 Java如何给Mysql中插入year ...

  9. java 类型擦除_java中的类型擦除type erasure

    简介 泛型是java从JDK 5开始引入的新特性,泛型的引入可以让我们在代码编译的时候就强制检查传入的类型,从而提升了程序的健壮度. 泛型可以用在类和接口上,在集合类中非常常见.本文将会讲解泛型导致的 ...

最新文章

  1. Hibernate学习笔记(一)----针对不同的数据库不同的配置
  2. TCP三次握手,四次分手
  3. 集群scan_扫描k8s集群中的漏洞
  4. python整数类型-python基础数据类型一(整数类型和布尔值)
  5. 谈谈我对sku的理解(3)----页面效果
  6. [java进阶]2.Jedis基础与List的接口
  7. OpenCV_轮廓的查找、表达、绘制、特性及匹配
  8. 自定义View调用onDraw方法
  9. Stm32——keil5项目创建步骤
  10. java怎么连高斯数据库_Gauss DB 数据库使用(二) Data Studio
  11. Android keyevent值中文表
  12. RSF 异步访问性能分析报告 - 百兆网卡下的彪悍性能
  13. 叹20年奶茶江湖纷争,入局奶茶行业仍有机会
  14. QScrollBar垂直滚动条简单样式定制
  15. matlab自带的插值函数interp1的四种插值方法
  16. Git push错误,Unauthorized fatal: Could not read from remote repository.未验证不能提交
  17. 存储过程之八-java代码调用oracle存储过程
  18. 英语Canutillos祖母绿canutillos单词
  19. OA系统,架起企业异地办公的桥梁
  20. 每日思考第 63 期:物理空间限制精神世界的发展

热门文章

  1. 从 Nginx 到 Pandownload,程序员如何避免面向监狱编程?
  2. 厉害!你的 CT 片子,AI 就能分析
  3. 涂鸦智能传感合作伙伴大会圆满落幕,打造安防传感新生态
  4. Electron 遭封杀,Web 开发者在苹果平台上举步维艰!
  5. 如何在 FPGA 上实现双线性插值的计算?
  6. 大前端时代下,如何成为一名优秀的程序员?
  7. android监听键盘的隐藏,Android监听软键盘的显示和隐藏
  8. linux cpu 工作频率,Linux系统限制CPU工作频率(示例代码)
  9. mysql重置密码报错,吐血整理
  10. typora markdown 标题自动编号