java10.面向对象之泛型

来源:互联网 发布:js 显示html代码 编辑:程序博客网 时间:2024/06/16 07:07

一、认识泛型

1.泛型(Generic)是在JDK1.5之后增加的新功能。

2.泛型可以解决数据类型的安全性问题,他主要的原理,是在类声明的时候通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。

3.格式:

访问权限 class 类名称<泛型,泛型…>{
属性
方法

4.对象的创建

类名称<具体类型> 对象名称 = new 类名称<具体类型>();

泛型代码示例:

class Point<T> {    //并不明确指定它的类型,而是看下面需要什么类型就传递什么类型。    private T x;    private T y;    public T getX() {        return x;    }    public void setX(T x) {        this.x = x;    }    public T getY() {        return y;    }    public void setY(T y) {        this.y = y;    }}/** * 经纬度 int float string *  * @author Clp * */public class GenericDemo01 {    public static void main(String[] args) {        Point<String> p = new Point<String>();        p.setX("经度:109");        p.setY("纬度:100");        System.out.println(p.getX() + " " + p.getY());    }}

运行结果:
这里写图片描述
.
.
.

二、构造方法中使用泛型

1.构造方法中使用泛型:

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

使用范例:

class Co<T> {    private T value;    public Co(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) {        Co<String> c = new Co<String>("构造方法中使用泛型");        System.out.println(c.getValue());    }}

结果:
这里写图片描述
.
.

三、指定多个泛型

范例:

class Gen<K, T> {    private T take;    private K key;    public T getTake() {        return take;    }    public void setTake(T take) {        this.take = take;    }    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.setTake(10);        g.setKey("key");        System.out.println(g.getTake() + " " + g.getKey());    }}

结果:
这里写图片描述
.
.

四、通配符

范例:

这里写代码片class Info<T> {    private T key;    public T getKey() {        return key;    }    public void setKey(T key) {        this.key = key;    }    @Override    public String toString() {        return this.getKey().toString();    }}public class GenericDemo04 {    public static void main(String[] args) {        Info<Integer> i = new Info<Integer>();        i.setKey(1000);        tell(i);    }    /**     * 通配符:?     *      * @param i     */    public static void tell(Info<?> i) { // <>里面如果用Object会报错,用一个通配符?        System.out.println(i);//i之所以可以直接被调用,是因为toString被重写了    }}

.
.

五、泛型接口

1.JDK1.5之后,不仅仅可以声明泛型类,也可以声明泛型接口,声明泛型接口和声明泛型类的语法类似,也是在接口名称后面加上< T >

2.格式:

interface 接口名称< 泛型标识 >{ }

3.范例:

interface GenInter<T> {    public void say();}class Gin<T> implements GenInter<String> {    private String info;    public Gin(String info) {        this.info = info;    }    public String getInfo() {        return info;    }    public void setInfo(String info) {        this.info = info;    }    @Override    public void say() {    }}public class GenericDemo05 {    public static void main(String[] args) {        Gin<String> g = new Gin<String>("jikexueyuan");        System.out.println(g.getInfo());    }}

六、泛型方法

1.泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据类型。

2.格式:

访问权限 < 泛型标识 > 泛型标识 方法名称([泛型标识 参数名称])

3.范例:

class Gener {    public <T> T tell(T t) {        return t;    }}public class GenericDemo06 {    public static void main(String[] args) {        Gener g = new Gener();        String str = g.tell("jikexueyuan");        System.out.println(str);        int i = g.tell(10);        System.out.println(i);    }}

结果:
这里写图片描述
.
.

泛型数组

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

2.范例:

public class GenericDemo07 {    public static void main(String[] args) {        String arr[] = { "www", "jikexueyuan", "com" };//也可以将String代换成Integer        tell(arr);    }    public static <T> void tell(T arr[]) {        for (int i = 0; i < arr.length; i++)            System.out.println(arr[i]);    }}
0 0