静态方法在类加载时就存在,是无法读取到类中的泛型的。
泛型的类型是在实例化时才确定的。
public class MyClass<T> {
private T value;
public MyClass(T value) {
this.value = value;
}
// 非静态方法可以访问泛型T
public void printValue() {
System.out.println(value);
}
// 静态方法无法直接访问泛型T 因为这个时候泛型还未确定 是在实例化对象时才确定
public static void printClassName() {
// 不能直接访问 T
// System.out.println(T.class); // 编译错误
}
public static void main(String[] args) {
MyClass<Integer> obj = new MyClass<>(123);
obj.printValue(); // 输出 123
MyClass.printClassName(); // 静态方法不能访问 T
}
}
MP
提供的静态工具类Db
和IService
中的方法一致,只不过IService中的方法是非静态的,Db提供的方法是静态的。
所以我们在继承IService时,指定泛型可以被方法接收,来判断对哪张表操作。
而Db就不能指定泛型了,所以Db的方法需要传一个额外的参数,就是class
字节码,表示操作哪张表。