泛型类,普通泛型类,限制型,通配符

/**
 * 自定义普通泛型类
 * @author Administrator
 *
 * @param <T> 泛型
 */
//public class GenericTest<T> {
// private T member;
// public T getMember() {
//  return member;
// }
// public void setMember(T member) {
//  this.member = member;
// }
//}

public class Person {}

public class Student extends Person {}

public class Teacher {}

/**
 * 限制型泛型类
 * @author Administrator
 *
 * @param <T> 泛型
 */
public class GenericTest<T extends Person> {
 private T member;
 public T getMember() {
  return member;
 }
 public void setMember(T member) {
  this.member = member;
 }
}

/**************普通泛型类的使用*****************/
// public static void main(String[] args) {
//  GenericTest<String> generic = new GenericTest<String>();
//  generic.setMember("abc");//正确,"abc"是字符串与泛型类型匹配
//  //generic.setMember(100);//出错,100是整形与泛型类型不匹配
//  
//  //GenericTest<int> generic2 = new GenericTest<int>();//出错,泛型类型只能是引用类型,不能是原始类型
//  GenericTest<Integer> generic2 = new GenericTest<Integer>();//正确
// 
//  GenericTest<Person> generic3 = new GenericTest<Person>();//正确
//  Person p = new Person();
//  p.setName("张三");
//  p.setAge(23);
//  generic3.setMember(p);
// }

/**************限制型的泛型类的使用*****************/
// public static void main(String[] args) {
//  GenericTest<Student> g1 = new GenericTest<Student>();//正确,因为Student有继承Person
//  GenericTest<Teacher> g2 = new GenericTest<Teacher>();//错误,因为Teacher没有继承Person
//  GenericTest<Person> g3 = new GenericTest<Person>();//正确,可以使用父类本身
// }

/**************通配符在泛型类中的使用*****************/
// public static void main(String[] args) {
//  //?是通配符,代表符合要求的类型
//  GenericTest<? extends Person> g1 = new GenericTest<Student>();//正确
//  GenericTest<? extends Person> g2 = new GenericTest<Teacher>();//错误
//  GenericTest<? extends Person> g3 = new GenericTest<Person>();//正确
// 
//  GenericTest<? super Student> g4 = new GenericTest<Person>();//正确
//  GenericTest<? super Student> g5 = new GenericTest<Student>();//正确
//  GenericTest<? super Student> g6 = new GenericTest<Teacher>();//出错
// }

泛型类,普通泛型类,限制型,通配符

时间: 2024-11-04 04:11:32

泛型类,普通泛型类,限制型,通配符的相关文章

java泛型类的继承规则

首先看一看java泛型类的使用: /** * 一个泛型方法:使程序更加安全 * 并且能被更多的使用 * @author 丁** * * @param <T> */ class Pair<T>{ private T first; private T second; //实例化类型变量 public static<T> Pair<T> makePair(Class<T> cl){ try { return new Pair<>(cl.ne

关于泛型类和扩展方法的一点思考

我们经常通过泛型构造函数创建泛型实例,也常调用实例的扩展方法.以下的代码在项目中随处可见: static void Main(string[] args) { var strs = new List<string> {"hello","world"}; var result = strs.Where(s => s.StartsWith("h")); foreach (var item in result) { Console.W

深入理解Java之泛型

1. Why ——引入泛型机制的原因 假如我们想要实现一个String数组,并且要求它可以动态改变大小,这时我们都会想到用ArrayList来聚合String对象.然而,过了一阵,我们想要实现一个大小可以改变的Date对象数组,这时我们当然希望能够重用之前写过的那个针对String对象的ArrayList实现. 在Java 5之前,ArrayList的实现大致如下: 1 public class ArrayList { 2 public Object get(int i) { ... } 3 p

泛型的基本介绍和使用

在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用.泛型在java中,是一个十分重要的特性,所以要好好的研究下. 泛 型的定义:泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型.这种参数类型可以用在类.接口和方法的创建中,分别称为泛 型类.泛型接口和泛型方法. 泛型思想早在C++语言的模板(Templates)中就开始生根发芽,

泛型概念及其特性

1.泛型是JDK1.5引入的新特性,也是最重要的一个特性2.泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的3.泛型的原理就是"类型的参数化",即把类型看做参数.也就是说把所要操作的数据类型看做参数,就像方法的形式参数是运行时传递的值的占位符一样. 4.简单的说,类型变量扮演的角色就如同一个参数,它提供给编译器用来类型检查的信息5.泛型可以提高代码的扩展性和重用性 6.泛型的作用及其引出: 如果我们需要产生多个对象,每个对象的逻辑完全相同,知识对象内的成员变量的类型

Java核心技术点之泛型

学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 1. Why --引入泛型机制的原因 假如我们想要实现一个String数组,并且要求它可以动态改变大小,这时我们都会想到用ArrayList来聚合String对象.然而,过了一阵,我们想要实现一个大小可以改变的Date对象数组,这时我们当然希望能够重用之前写过的那个针对String对象的ArrayList实现. 在Java 5之前,Array

疯狂Java讲义(第4版) PDF 电子书 百度云 网盘下载

java电子书推荐理由:1)作者提供用于学习和交流的配套网站及作者亲自在线的答疑微信群.QQ群. 2)DVD光盘中含 1500分钟图书部分内容的相关视频 图书配套代码 Java面试题真题 PPT课件 设计模式电子书 有助于完成课后练习的大量完整案例 3)<疯狂Java讲义>历时十年沉淀,现已升级到第4版,经过无数Java学习者的反复验证,被包括北京大学在内的大量985.211高校的优秀教师引荐为参考资料.选作教材. 4)<疯狂Java讲义>曾翻译为中文繁体字版,在宝岛台湾上市发行.

笔记:泛型

泛型程序设计意味着编写额代码可以被很多不同类型的对象所重用,并提供强类型校验,避免强制类型转换,并使程序具有更好的可读性和安全性. 定义简单泛型类 一个泛型类就是具有一个或多个类型变量的类,定义格式如下: ????????public class Pair<T> ????????{ ????????????-- ????????} 泛型类引入了一个类型变量T,使用尖括号括起来,并放在类名的后面,泛型类可以有多个类型变量,多个类型变量使用","号分割,在类定义中的类型变量可以

java 泛型 窜讲

一.为什么使用泛型      复用性:泛型的本质就是参数化类型,因而使用编写的泛型代码可以被许多不同类型的对象所复用.      安全性:在对类型Object引用的参数操作时,往往需要进行显式的强制类型转换.这种强制类型转换需要在运行时才能被发现是否转换异常,通过引入泛型能将在运行时才能检查类型转换,提前到编译时期就能检查. 二.自定义泛型 java中自定义泛型分为三种:泛型类.泛型接口.泛型方法. 下面使用一个案例演示泛型类.泛型方法,泛型接口类似,所以不再演示. // 自定义泛型类publi