java学习日记-泛型、注解

一、泛型

代表一组类似的操作
尝试创建一个方法可以遍历整数型数组和字符串型数组,而在java中方法所接受的参数是只能被定义为一种类型,因此无法创建一种输出方法能适应输出三种数据类型数组。
所以需要对不同类型的数组来创建不同的方法,这非常的麻烦。而泛型正是用来解决这个问题,泛型可以代表一组类似的操作
以下是泛型的基本使用准则:

  1. 声明泛型方法需要有一个类型参数声明区域,该区域的内容用尖括号号’<>'括起来,位置在方法返回类型前或是类名后面;
  2. 每一个类型参数声明部分包含一个或多个类型参数,是用于指定泛型类型名称的标识符;
  3. 类型参数可以被用来声明返回类型,也可以被用来声明方法接受参数类型;
  4. 类型参数只能表示引用数据类型;
package s12_26;
import java.util.*;
/**
 * generic_para
 */

public class generic_para {
    /*尝试创建一个方法能接受并输出多种种数据类型数组,比如一个可以遍历整数型数组和字符串型数组,
		而在java中方法所接受的参数是只能被定义为一种类型,因此无法创建一种输出方法能适应输出三种数据类型数组。
		所以需要对不同类型的数组来创建不同的方法,这非常的麻烦。
		而泛型正是用来解决这个问题,泛型可以代表一组类似的操作
		以下是泛型的基本使用方法:
        1.声明泛型方法需要有一个类型参数声明区域,位置在方法返回类型前,在'<>'中;
        2.每一个类型参数声明部分包含一个或多个类型参数,是用于指定泛型类型名称的标识符;
        3.类型参数可以被用来声明返回类型,也可以被用来声明方法接受参数类型;
        4.类型参数只能代表引用类型;
    */

    public static  void printArray(E[] array){
            for (E element : array) {
                System.out.print(element+" ");        
            }
            System.out.println();
    
    }

    public static > void maxo(T x, T y, T z) {
        //初始化最大值
        T max = x;
        if (max.compareTo(y)<0) {
            max = y;
        }
        if (max.compareTo(z)<0) {
            max = z;
        }
        System.out.print(max);
        System.out.println();
    }

    public static void getData(List data){
        System.out.println(data.get(0));
    }

    public static void getData2(List data){
        System.out.println(data.get(0));
    }

    public static void main(String[] args) {
//1.泛型基本使用,定义一个方法来输出遍历并输出三种不同类型数组的所有元素
    //初始化三个不同类型的数组
    Integer[] intarray = {1,2,3,4,5};
    Double[] darray = {1.23, 54.43, 6.32,5.332};
    String[] sarray = {"welcome", "to", "java", "world!"};
    //调用输出方法
    printArray(intarray);
    printArray(darray);
    printArray(sarray);
//2.有界类型参数:对类型参数类型进行限制,比如限制在Number类
    System.out.print("2,4,7 输出结果:");
    maxo(2, 4, 7);
    System.out.print("2.34, 45.3, 65.4 输出结果:");
    maxo(2.34, 45.3, 65.4);
    System.out.print("'hello','world', 'welcome' 输出结果:");
    maxo("hello", "world", "welcome");

//3.泛型类:泛型类在创建对象的时候需要将泛型参数类型具体化
    generic_cla strCla = new generic_cla(); 
    strCla.add("很不开心");
    System.out.println("字符创类型:"+strCla.get());
    generic_cla intCla = new generic_cla();
    intCla.add(7777);
    System.out.println("字符创类型:"+intCla.get());

//4.类型通配符:用?代表所有具体的类型参数,例如List可以接受Numble和String类型的参数
    List iList = new ArrayList();
    List sList = new ArrayList();

    iList.add(12);
    sList.add("字符串变量");

    getData(iList);
    getData(sList);
//5.类型通配符的上限也可以通过extends implements等关键字来限制
    getData2(iList);
    // getData2(sList);//由于将泛化类型限制为Number,此处显示错误表明该于泛化类型不适用字符串list。
    }
}

二、注解

需要结合注解处理工具、在框架中使用频繁,通过注解处理工具可以在源码层次进行操作,而且可以处理放置了注解的类文件。

目前了解到注解的分类按照运行机制可分为:

源码注解 只在源码文件中存在,编译后失效
编译时注解 在源码文件和编译时都存在
运行时注解 运行时也存在并且能影响程序运行逻辑

按照来源分类

jdk自带注解 包括三种标准注解和四种元注解
第三方注解 一般来自第三方的框架,比如spring,使用最频繁
自定义注解 自己根据语法编写的注解

你可能感兴趣的:(java学习日记-泛型、注解)