黑马程序员——Java基础视频笔记(四):泛型

来源:互联网 发布:交易模拟软件 编辑:程序博客网 时间:2024/06/04 18:25

------- android培训、java培训、期待与您交流! ---------


今天学习了泛型的相关知识,笔记记录如下,与大家分享:


泛型:JDK 1.5 之后增加的新功能,


泛型,可以解决数据类型的安全性问题;
原理:在类声明的时候,通过一个标识,表示类中某个属性的类型;
        或者是某个方法的返回值及参数类型;
格式:
访问权限 class 类名称<泛型,泛型>{
属性
方法()
}

对象的创建:
类名称<具体类型> 对象名称 = new 类名称<具体类型>


class Point<T>{// T 代表泛类型,可以严格指定传入的参数类型
// 避免产生原因不明的错误
private T x;
private T y;
}


1、构造方法使用泛型:
构造方法可以为类中的属性初始化,如果类中的属性通过泛型指定,
而又需要通过构造方法设置属性内容的时候,那么构造方法的定义与之前并
无不同,不需要像声明类那样,指定泛型;

/* * 经纬度 * int * float * String *  * 定义 Object类型。创建 set 和 get 方法Source——Genterator Getters Setters *  */class Point<T>{// T 代表泛类型,可以严格指定传入的参数类型private T x;private T y;public Object getX() {return x;}public void setX(T x) {this.x = x;}public Object getY() {return y;}public void setY(T y) {this.y = y;}}public class GenericDemo01 {public static void main(String[] args) {Point<String> pt = new Point<String>();pt.setX("经度: 10");pt.setY("维度: 20");System.out.println(pt.getX()+"  "+pt.getY());/*Point pc = new Point();pc.setX(10); //给Object X 传入10pc.setY(10);int px = (Integer)pc.getX();  // Integer拆箱、装箱,把 Object转为 intint py = (Integer)pc.getY();System.out.println("x = " +px+"  \r"+"y = "+py);*/}}

2、指定多个泛类型:
class Gen<T, K>{
private T toke;
private K key;
记住定义 get 和 set
}
class Con2<T>{//定义泛型private T value;public Con2(T value) {this.value = value;}public T getValue() {//获取 实例化时,传入构造器的参数值return value;}public void setValue(T value) {this.value = value;}}public class GenericDemo02 {public static void main(String[] args) {Con2<String> c2 = new Con2<String>("这是构造方法的泛型用法!");//传入构造器的参数System.out.println(c2.getValue());}}

3、通配符的使用 
通配符: ?
格式:   Info<?> i
使用通配符可以让泛型匹配任何格式;

class Gen<T, K>{//定义两个泛类型private T toke;private K key;public T getToke() {return toke;}public void setToke(T toke) {this.toke = toke;}public K getKey() {return key;}public void setKey(K key) {this.key = key;}}public class GenericDemo03 {public static void main(String[] args) {Gen<String, Integer> g = new Gen<String, Integer>();g.setToke("T is String");g.setKey(100);System.out.println("Toke is:"+g.getToke()+"\rKey is:"+g.getKey());}}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span>

4、泛型接口: 
JDK 1.5 之后,不仅仅可以声明泛型类,也可以声明接口,声明泛型类
和声明接口的语法类似,也是在接口名称后面加上<T>
  格式:
interface 接口名称<泛型标识> {
}
接口直接指定泛型的类型,然后子类继承泛型类型

<span style="font-size:18px;">interface GenInter<T>{ //泛型接口public void say();}// 创建子类  继承接口class Gin implements GenInter<String>{  // 继承泛型接口,直接指定String类型private String info;public Gin(String info){this.info = info;}// 复写say()方法public void say(){}//set getpublic String getInfo() {return info;}public void setInfo(String info) {this.info = info;}}public class GenericDemo05 {public static void main(String[] args) {Gin g = new Gin("泛型类");// 如果在类中没有指定String,而用<T>// 则需要在此指定System.out.println(g.getInfo());  // g.getInfo() 获取的是 泛型接口的指定类型}}</span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span>

5、泛型方法:

1、泛型方法中可以定义泛型参数
此时,参数的类型就是传入的数据类型
2、格式:
访问权限 <泛型标识> 泛型标识 方法名称([泛型标识 参数名称])

class Gener{// 创建 泛 型 方 法public <T>T tell(T t){return t;}}public class GenericDemo06 {public static void main(String[] args) {Gener g = new Gener();// 直接赋予 字符串String s = g.tell("我是泛型打印的~");//调用 泛型方法System.out.println(s);// 泛型也可以直接赋予整形int i = g.tell(10);  // 泛型,可以传递任意数据类型给 泛型方法System.out.println(i);}}

6、泛型数组: GenericDemo07.java

需要和泛型方法搭配使用;

1、在使用泛型方法的时候,也可以传递或返回一个泛型数组

<span style="font-size:18px;">public class GenericDemo07 {// 泛型数组 需要配合 泛型方法, 所以定义一个泛型方法public static <T> void tell(T arr[]){//打印 泛型数组 每个元素for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}public static void main(String[] args) {// 给数组赋值String[] arr = {"asd","126","jack"};// 调用泛型方法tell(arr);}}</span>



0 0
原创粉丝点击