面试题Java基础学习

Java泛型

2019-07-20  本文已影响9人  JWking

    Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型方法

    可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

泛型方法的规则

    所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)。

    每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。

    类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。

    泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。

Java代码实例

实例1

//使用泛型方法输出不同类型数组的元素

public class GenericsTest {

public static void printArray(E[] inputArray){                               //泛型方法printArray

for (E element:inputArray){                                                        //遍历数组

            System.out.printf("%s    ",element);

}

System.out.println();

}

public GenericsTest(){

Integer[] intArray = {1,2,3};                                                          //申明一个整型数组

        Double[] doubleArray = {1.11,2.22,3.33};                            //申明一个双精度数组

        Character[] charArray = {'A','B','C'};                                    //申明一个字符型数组

        System.out.println("整型数组元素为:");

printArray(intArray);                                               //将整型数组作为参数传递到泛型方法printArray

        System.out.println("双精度数组元素为:");

printArray(doubleArray);                                        //将整型数组作为参数传递到泛型方法printArray

        System.out.println("字符型数组元素为:");

printArray(charArray);                                            //将整型数组作为参数传递到泛型方法printArray

    }

}

运行结果如下:

实例1

实例2

//使用有界的类型参数的泛型方法

public class GenericsTest2 {

public static >T maxnum(T x,T y,T z){                             //比较3个元素的大小,返回最大值

        T max = x;                                                               //假定x为最大值max

        if(y.compareTo(max) >0)                                         //y和max比较

            max = y;

if(z.compareTo(max) >0)                                                 //z和max比较

            max = z;

return max;                                                                      //返回最大值

    }

public GenericsTest2(){

System.out.printf("%d,%d,%d中最大的数是:%d\n",3,4,5,maxnum(3,4,5));

System.out.printf("%.1f,%.1f,%.1f中最大的数是:%.1f\n",3.33,4.44,5.55,maxnum(3.33,4.44,5.55));

System.out.printf("%s,%s,%s中最大的数是:%s","aaa","abc","ccc",maxnum("aaa","abc","ccc"));

}

}

运行结果如下:

实例2

实例3

//定义一个泛型类

public class GenericsTest3 {

private T t;

public void add(T t){                                               //定义设定值得方法

        this.t = t;

}

public T get(){                                                         //定义获取值的方法

        return t;

}

}

public class Main {

public static void main(String args[]){

GenericsTest3 integerg =new GenericsTest3();       //申明一个整型泛型类对象

        GenericsTest3 stringg =new GenericsTest3();//申明一个字符串泛型类对象

        integerg.add(new Integer(3));                         //设定整型对象的值

        stringg.add(new String("泛型类"));                 //设定字符串对象的值

        System.out.println("整型值为:"+integerg.get());             //获取整型的值

        System.out.println("字符串值为:"+stringg.get());           //获取字符串的值

    }

}

运行结果如下:

实例4

import java.util.ArrayList;

import java.util.List;

//类型通配符

public class GenericsTest4 {

public static  void getData(List data){

System.out.println("列表中存在数据:"+data.get(0));

}

public GenericsTest4(){

List name =new ArrayList();                       //定义一个字符串型list集合

        List id =new ArrayList();                     //定义一个整型list集合

        List password =new ArrayList();        //定义一个number型list集合

        name.add("admin");                          //往集合添加元素

        id.add(110);

password.add(123);

getData(name);                                        //获取集合元素

getData(id);

getData(password);

}

}

运行结果如下:

实例5

import java.util.ArrayList;

import java.util.List;

//类型通配符+有界类型参数

public class GenericsTest5 {

public static void getData(List data){

System.out.println("列表中存在数据:"+data.get(0));

}

public static void getUperNumber(List data){

System.out.println("列表中存在数据:"+data.get(0));

}

public GenericsTest5(){

List name =new ArrayList();                                    //定义一个字符串型list集合

List id =new ArrayList();                                          //定义一个整型list集合

List password =new ArrayList();                             //定义一个number型list集合

name.add("admin");                                               //往集合添加元素

 id.add(110);

password.add(123);

//getUperNumber(name);                                      //获取集合元素

getUperNumber(id);

getUperNumber(password);

}

}

运行结果如下:

上一篇 下一篇

猜你喜欢

热点阅读