Java泛型相关学习

Java泛型相关学习

1.什么是泛型

泛型,即”参数化类型”,在不创建新的类型的情况下,通过泛型指定不同类型来控制形参具体参数类型.这种参数类型可以用在类,接口,方法中,分别被称作泛型类,泛型接口,泛型方法.

泛型只在编译阶段有效,参数的类型是在编译阶段就确定了,编译器会在生成的代码中是用确定的类型替换.

2.泛型类

泛型类的最基本写法

class 类名称 <泛型标识:可以随便写任意标识号,标识指定的泛型的类型>{

}
public class Generic<T>{ 
    //key这个成员变量的类型为T,T的类型由外部指定  
    private T key;

    public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
        this.key = key;
    }

    public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
        return key;
    }
}
3.泛型接口
//定义一个泛型接口
public interface Generator<T> {
    public T next();
}

实现一个泛型接口

/**
 * 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中
 * 即:class FruitGenerator<T> implements Generator<T>{
 * 如果不声明泛型,如:class FruitGenerator implements Generator<T>,编译器会报错:"Unknown class"
 */
class FruitGenerator<T> implements Generator<T>{
    @Override
    public T next() {
        return null;
    }
}
4.泛型通配符

类型通配符一般是使用?代表具体的类型实参,实际使用的时候可以是对应的类型,可以代表所有类型的父类.

5.泛型方法可变参数
public <T> void printMsg( T... args){
    for(T t : args){
        Log.d("泛型测试","t is " + t);
    }
}
6.泛型边界限制

有时候我们要对泛型的类型进行限制,必须是某一些类型而不是全部类型,就需要用到泛型边界

例子

public void showKeyValue1(Generic<? extends Number> obj){
    Log.d("泛型测试","key value is " + obj.getKey());
}

文章作者: 孙老师
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 孙老师 !
 上一篇
Android面试之Handler相关学习 Android面试之Handler相关学习
###Android面试之Handler相关学习 1.Android消息机制之Looper.java源代码学习1). 准备阶段,在子线程中调用Looper.prepare()方法或者在主线程调用Looper.prepareMainLoope
2020-02-12 孙老师
下一篇 
Say hello to x86_64 Assembly [part 8] Say hello to x86_64 Assembly [part 8]
翻译原文地址 Say hello to x86_64 Assembly [part 8]这是Say hello to x86_64 Assembly的第八部分,也是最后一部分,下面我们将介绍如何在汇编程序中使用非整数。使用浮点数据有两种方法
2020-01-11 孙老师
  目录