美文网首页
2020-02-21 Java面向对象之泛型

2020-02-21 Java面向对象之泛型

作者: fjasmin | 来源:发表于2020-02-21 12:12 被阅读0次

1.认识泛型

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

源程序:

class Point{
    private Object x ;
    private Object y ;
    public Object getX() {
        return x;
    }
    public void setX(Object x) {
        this.x = x;
    }
    public Object getY() {
        return y;
    }
    public void setY(Object y) {
        this.y = y;
    }
}

/**
 * 经纬度
 * int
 * float
 * String
 * */

public class GenericDemo01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Point p = new Point();
        p.setX(10.1f);
        p.setY(20.1f);
        float px =(Float) p.getY();
        float py =(Float) p.getY();
        System.out.println("x = "+px + "y = "+ py);
    }

}

改为泛型后 区别:

class Point<T>{
    private Object x ;
    public Object getX() {
        return x;
    }
    public void setX(Object x) {
        this.x = x;
    }
    public Object getY() {
        return y;
    }
    public void setY(Object y) {
        this.y = y;
    }
    private Object y ;  
}

/**
 * 经纬度
 * int
 * float
 * String
 * */

public class GenericDemo01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Point<String> p = new Point<String>();
        p.setX(" 10");
        p.setY( " 20");
    }

}

2.构造方法中泛型使用

EX:

class Con<T>{
    private T value1;
    
    public Con(T value1) {
        this.value1 = value1;
    }
    public T getValue1() {
        return value1;
    }

    public void setValue1(T value1) {
        this.value1 = value1;
    }
}
public class GenericDemo2 {
    public static void main(String[] args) {
        Con<String>  c = new Con<String>("构造方法中使用泛型");
        System.out.println(c.getValue1());
    }
}

3.设置多个泛型

3.1 设置多个泛型 直接在<>中添加多个泛型就可以。
EX:

 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 GenericDemo3 {
    public static void main(String[] args) {
        Gen<String,Integer> gen = new Gen<String,Integer>();
        gen.setKey("hello");
        gen.setTake(100);
        System.out.println("getKey: "+ gen.getKey() +" getTask: " + gen.getTake());
    }
}

4.通配符

EX:

class Info<T>{
    private T key;
    public T getKey() {
        return key;
    }

    public void setKey(T key) {
        this.key = key;
    }
    
    public String toString() {
        return this.getKey().toString();
    }
}
    
public class GenericDemo4 {
    public static void main(String[] args) {
        Info<String> i = new Info<String>();
        i.setKey("fjasmin");
        tell(i);
    }   
    /**
     * 通配符 : ?
     * */
    public static void tell(Info<?> i) {
        System.out.println(i);
    }
}

5.泛型接口

5.1 在JDK1.5 以后 不仅仅可以声明泛型类,也可以声明泛型的接口,声明泛型接口和声明泛型类的语法类似,也可以在接口名称后加上<T>
5.2 格式
interface 接口名称<泛型标识> {}
EX:

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

class Gin<T> implements GenInter<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() { 
   }
   
}

public class GenericDemo5 {

   public static void main(String[] args) {
       Gin<String> g = new Gin<String>("fjasmin");
       System.out.println(" info : "+ g.getInfo());
   }
}

6.泛型方法

6.1 泛型方法中可以定义泛型参数。此时,参数的类型就是传入数据类型。
6.2 语法
访问权限 <泛型标识> 泛型标识 方法名称([泛型标识 参数名称])
EX:

class Gener{
    public <T>T tell(T t) {
        return t;
    }
}

public class GenericDemo6 {

    public static void main(String[] args) {
        Gener g = new Gener();
        String str = g.tell("fjasmin");
        System.out.println(str);
        int i = g.tell(10);
        System.out.println(i);
    }
}

7.泛型数组

7.1 使用泛型方法的时候可以返回一个泛型数组。

public class GenericDemo6 {

    public static void main(String[] args) {
        String arr[] = {"fjasmin","shlearry","anke","hanxi"};
        tell(arr);
    }
    
    public static <T>void tell(T arr[]) {
        for(int i = 0;i < arr.length;i++) {
            System.out.println(arr[i]);
        }
    }
}

相关文章

  • java 泛型解析

    Java 泛型 1、泛型的精髓是什么 2、泛型方法如何使用 概述: 泛型在java中具有重要地位,在面向对象编程模...

  • 2020-02-21 Java面向对象之泛型

    1.认识泛型 1.1. 泛型是JDK1.5之后增加的新功能,Generic.1.2. 泛型可以解决数据类型的安全性...

  • java泛型详解

    java泛型详解 1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什...

  • Java中的泛型/范型

    维基百科中关于Java泛型的描述 Java 泛型的参数只可以代表类,不能代表个别对象。由于Java泛型的类型参数之...

  • Java 泛型

    泛型概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用...

  • java平台理解

    Java特性: 面向对象(封装,继承,多态) 平台无关性(JVM运行.class文件) 语言(泛型,Lambda)...

  • Java自学-泛型 泛型转型

    Java 中的子类泛型转型成父类泛型 步骤 1 : 对象转型 根据面向对象学习的知识,子类转父类 是一定可以成功的...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • JVM学习之运行期优化知识点

    JAVA简介 基本语言特性(面向对象(封装,继承,多态),泛型,Lambda,反射) 平台无关性(JVM运行.cl...

  • Java泛型最详细的讲解

    1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要...

网友评论

      本文标题:2020-02-21 Java面向对象之泛型

      本文链接:https://www.haomeiwen.com/subject/bjhcqhtx.html