JavaSE学习笔记(三)面向对象之泛型

(1)泛型(Generic)

泛型是JDK1.5之后增加的新功能
* 泛型可以解决数据类型的安全性问题,它主要的原理是在类声明的时候通过一个标识表示类中某个属性的类型
* 或是某个方法的返回值及参数类型
* 格式:访问权限 class 类名称<泛型,泛型…>{
* 属性
* 方法
* }
* 对象的创建
* 类名称<具体类型> 对象名称 = new 类名称<具体类型>();

下面我们以一个例子来看一下:

 *
 * @author daoyuan
 *
 * @param <T>
 */
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;
    }

}

public class GenericDemo1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Point<String> p=new Point<String>();
        p.setX("经度为:100");
        p.setY("纬度为:100");
        System.out.println(p.getX()+p.getY());
    }
}

(2)构造方法使用泛型

class Gen<T1>{
    private T1 value;

    public T1 getValue() {
        return value;
    }

    public void setValue(T1 value) {
        this.value = value;
    }

    public Gen(T1 value){
        this.value = value;
    }
}

public class GenericDemo2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Gen<String> c = new Gen<String>("构造方法中使用泛型");
        System.out.println(c.getValue());
    }
}

(3)设置多个泛型

直接在<>中添加多个泛型就可以了

class Gen1<K,T>{
    private T t;
    private K k;
    public T getT() {
        return t;
    }
    public void setT(T t) {
        this.t = t;
    }
    public K getK() {
        return k;
    }
    public void setK(K k) {
        this.k = k;
    }

}
public class GenericDemo3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Gen1<String,Integer> gen = new Gen1<String,Integer>();

        gen.setK("danyuan");
        gen.setT(10);
        System.out.println(gen.getK()+" "+ gen.getT());
    }

}

(4)通配符的使用

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 GenericDemo4 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Info<String> i = new Info<String>();
        i.setKey("daoyuan");
        tell(i);
    }

    /** * 通配符:?,无论什么类型都可以使用 * @param i */
    public static void tell(Info<?> i){
        System.out.println(i);
    }
}

(5)泛型接口

(1)在JDK1.5后不仅可以声明泛型类,也可以声明接口,语法类似,也是在接口名称后面加上
(2)格式:interface 接口名称<泛型标识>{}

interface Gen5<T>{
    public void say();
}

class Gin<T> implements Gen5<T>{
    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() {
        // TODO Auto-generated method stub

    }

}
public class GenericDemo5 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Gin<String> g = new Gin("daoyuan");
        System.out.println(g.getInfo());
    }
}

(6)泛型方法:

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

class Gener{
    public <T>T tell(T t){
        return t;
    }
}
public class GenericDemo6 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Gener g= new Gener();
        String str = g.tell("daoyuan");
        System.out.println(str);

        int str2 = g.tell(10);
        System.out.println(str2);

    }
}

(7)泛型数组

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

public class GenericDemo7 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
// String arr[] = {"daoyuan"};
// tell(arr);

        Integer arr[] = {10,12};
        tell(arr);
    }
    public static <T> void tell(T arr[]){
        for (int u = 0; u < arr.length; u++) {
            System.out.println(arr[u]);
        }
    }
}

你可能感兴趣的:(java,se)