Java笔记(四):反射 泛型

反射

反射Relection 指通过实例获取class信息的方法

方法一:通过静态变量

Class cls = String.class;

方法二:通过getClass()方法

String s = "Hello";
Class cls = s.getClass();

访问字段

  • Field getField(name):根据字段名获取某个public的field(包括父类)
  • Field getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类)
  • Field[] getFields():获取所有public的field(包括父类)
  • Field[] getDeclaredFields():获取当前类的所有field(不包括父类)

调用方法

  • Method getMethod(name, Class…):获取某个public的Method(包括父类)
  • Method getDeclaredMethod(name, Class…):获取当前类的某个Method(不包括父类)
  • Method[] getMethods():获取所有public的Method(包括父类)
  • Method[] getDeclaredMethods():获取当前类的所有Method(不包括父类)

泛型

public class ArrayList<T> {
	private T[] array;
	private int size;
	public void add(T e) {...}
}

T可以是任何class

泛型就是定义一种模板 编写一次就能匹配不同的class

注:泛型并不能用于静态方法

多泛型 如Map<K,V> 在使用时要指出两种类型

泛型擦除:泛型<T>不能是基本类型;使用getClass方法不会取得<T>;带泛型的类型无法判断;泛型T不能实例化

在继承泛型的情况下,子类可以获取父类的泛型类型

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class main {
    public static void main(String[] args){
        Class<IntPair> clazz = IntPair.class;
        Type t = clazz.getGenericSuperclass();
        if (t instanceof ParameterizedType) {
            ParameterizedType pt = (ParameterizedType) t;
            Type[] types = pt.getActualTypeArguments();
            Type firstType = types[0];
            Class<?> typeClass =(Class<?>) firstType;
            System.out.println(typeClass);
        }
    }
}

class Pair<T> {
    private T first;
    private T last;
    public Pair(T first,T last) {
        this.first = first;
        this.last = last;
    }
    public T getFirst() {
        return first;
    }
    public T getLast() {
        return last;
    }
}

class IntPair extends Pair<Integer> {
    public IntPair(Integer first, Integer last) {
        super(first, last);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值