<泛型>的认识
2017-07-28 22:29
141 查看
main 方法中:
Arraylist<Person> l=new Arraylist<Person>(); // 确定类型 集合只能存放Person对象
al.add(new Person("zhangsan",20)); //不会报错
//al.add("aaa"); //报错
//al.add(new Dog()) //报错
//加了泛型 迭代器不需要强转了
Iterator<Person>iterator=al.iterator();
while(iterator.hasNext()){
syso(iterator.next().name);
}
class Person{
String name;
int age;
//构造方法
public Person(String name,int age){
super();
this.name=name;
this.age=age;
}
}
class Dog{
}
*******************************************************
*
* 三个工厂
* 一个工厂只能实习生
* 一个工厂只能工人
* 一个工厂只能老板
*
* 当类型不确定时,想起泛型
*
* 1.泛型在类中的体现, 类在创建对象的时候把类型确定下来
* 2.泛型在方法中的体现
* 3.泛型在静态方法中的体现,不能去访问类中的泛型
* 4.泛型在接口上的体现
* 要么在实现类的时候确定,要么在创建对象的时候确定
* ******
*******************************************************************
* ******在设计类或者接口或方法时,如果类型不确定的时候,使用泛型***
* ****** 但是在使用的时候一定要确定类型,默认会认为object ***
* */***************************************************************
public class Demo2 {
public static void main(String[] args) {
//创建对象的时候 student 传给下面的<T> 所以<S>不是Student(泛型在方法中的体现)
//类型传的Student 确定类型 <T>是 <Student>
Factory<Student> f1 = new Factory<Student>();
f1.add(new Student());//只能传Student
//类型传的是<Worker>
Factory<Worker> f2 = new Factory<Worker>();
f2.add(new Worker());
//这个add1 传的可以就不是Worker类型 所以不报错 (因为泛型在方法中的应用)
f2.add1(new Student());
//泛型在接口中的体现
InterImpl<Worker> ii = new InterImpl();
}
}
//类型不确定的时候 写大写<T> 传什么就是什么↑↑↑
class Factory<T>{
public void add(T t){
}
//这个S不是student 对应上面的add1 可以不用类泛型指定的类型
public <S> void add1(S s){
T t; //不会报错 可以访问类中的泛型
}
//泛型在静态方法中的体现,不能去访问类中的泛型
public static <S> void add1(S s){
T t;
}
}
class Worker{}
class Student{}
class Boss{}
//泛型在接口中的体现
interface Inter<T>{
void add(T t);
}
class InterImpl<T> implements Inter<T>{
@Override
public void add(T t) {
}
}
Arraylist<Person> l=new Arraylist<Person>(); // 确定类型 集合只能存放Person对象
al.add(new Person("zhangsan",20)); //不会报错
//al.add("aaa"); //报错
//al.add(new Dog()) //报错
//加了泛型 迭代器不需要强转了
Iterator<Person>iterator=al.iterator();
while(iterator.hasNext()){
syso(iterator.next().name);
}
class Person{
String name;
int age;
//构造方法
public Person(String name,int age){
super();
this.name=name;
this.age=age;
}
}
class Dog{
}
*******************************************************
*
* 三个工厂
* 一个工厂只能实习生
* 一个工厂只能工人
* 一个工厂只能老板
*
* 当类型不确定时,想起泛型
*
* 1.泛型在类中的体现, 类在创建对象的时候把类型确定下来
* 2.泛型在方法中的体现
* 3.泛型在静态方法中的体现,不能去访问类中的泛型
* 4.泛型在接口上的体现
* 要么在实现类的时候确定,要么在创建对象的时候确定
* ******
*******************************************************************
* ******在设计类或者接口或方法时,如果类型不确定的时候,使用泛型***
* ****** 但是在使用的时候一定要确定类型,默认会认为object ***
* */***************************************************************
public class Demo2 {
public static void main(String[] args) {
//创建对象的时候 student 传给下面的<T> 所以<S>不是Student(泛型在方法中的体现)
//类型传的Student 确定类型 <T>是 <Student>
Factory<Student> f1 = new Factory<Student>();
f1.add(new Student());//只能传Student
//类型传的是<Worker>
Factory<Worker> f2 = new Factory<Worker>();
f2.add(new Worker());
//这个add1 传的可以就不是Worker类型 所以不报错 (因为泛型在方法中的应用)
f2.add1(new Student());
//泛型在接口中的体现
InterImpl<Worker> ii = new InterImpl();
}
}
//类型不确定的时候 写大写<T> 传什么就是什么↑↑↑
class Factory<T>{
public void add(T t){
}
//这个S不是student 对应上面的add1 可以不用类泛型指定的类型
public <S> void add1(S s){
T t; //不会报错 可以访问类中的泛型
}
//泛型在静态方法中的体现,不能去访问类中的泛型
public static <S> void add1(S s){
T t;
}
}
class Worker{}
class Student{}
class Boss{}
//泛型在接口中的体现
interface Inter<T>{
void add(T t);
}
class InterImpl<T> implements Inter<T>{
@Override
public void add(T t) {
}
}
相关文章推荐
- 黑马程序员_java对泛型的限定: <? extends E > , < ? super E > 的理解和体会。
- <Unity3D>Unity3D入门篇——第二讲 初步认识Unity
- <Python初学>Python中的变量类型。对赋值、浅拷贝与深拷贝的初步认识。
- JAVA 泛型中的<T> 和 <?> 的应用场景
- Java中对<对象> 和 <封装>的认识
- <EffectiveJava>读书笔记--02泛型数组
- 泛型中<? super T> 和<?extends T>的区别
- <转>SparkSQL – 从0到1认识Catalyst
- <HeadFirst_HTML5> O'REILLY_Chap.1_认识HTML5
- <NET CLR via c# 第4版>笔记 第12章 泛型
- <Power Shell>02 认识powershell
- <HeadFirst_HTML与CSS> O'REILLY_Chap.1_认识HTML
- <s:iterator>标签遍历动态数组<泛型>:ArrayList<对象>,怎样批量修改数据并一起提交到后台
- <HeadFirst_HTML与CSS> O'REILLY_Chap.2_认识HTML中的"HT"
- <转载> Java(16):泛型讲解
- 认识IL代码---从开始到现在 <第二篇>
- <CoreJava> 5.3 泛型数组列表
- <>这个符号表示泛型的意思
- <HeadFirst_HTML与CSS> O'REILLY_Chap.5_认识媒体
- 父类使用<T>泛型 并通过注入方式 获取到实体类型