java反射泛型
A. java反射与泛型:Class<>和Class一样吗我感觉一样
java5开始的泛型。Class<?>只是其中一种。
Vector<?> vec = new Vector<?>()
Vector<int> vec = new Vector<int>()
Vector vec1 = new Vector(); 这俩一样不?
---------------------------------------------------------
而class<?>与class的不同之处就是,前者能拿到泛型的具体类型,而后者不能。
这往往是设计框架时使用的,极具灵活性。
平时一般用的很少。因为反射通常只会反射一个普通的类,所以也就没啥区别了
B. Java通过反射出来的类如何作为泛型的类型
时隔四年后看到的。一般出现这种情况可以 写一个用来统一类型的 接口;
例如:
public class TypeVre {
interface A {
}
class B implements A{}
class C implements A{}
public static void main(String[] args) {
List<A> ss =new ArrayList<A>();
TypeVre typeVre = new TypeVre();
B b = typeVre.new B();
C c = typeVre.new C();
ss.add(b);
ss.add(c);
int size = ss.size();
for (int i = 0; i < size; i++) {
System.out.println(ss.get(i));
}
}
}
C. java参数为泛型的方法怎么反射
通过方法,取得真正的类型的Class,就可以运用了
- =(ParameterizedType)this.getClass().getGenericSuperclass();//获取当前new对象的泛型的父类类型
- Classclazz=(Class<T>)parameterizedType.getActualTypeArguments()[0];
- System.out.println("clazz==>>"+clazz);
~
~
~
~
D. Java Web项目中反射工具类里关于泛型的使用
这是一个泛型方法,返回值是Class<T>类型的
看看这个http://www.cnblogs.com/iyangyuan/archive/2013/04/09/3011274.html
返回值类型是Class类型
E. java课程分享Java的反射机制
Java反射机制是一个非常强大的功能,在很多大型项目比如Spring,Mybatis都可以看见反射的身影。通过反射机制我们可以在运行期间获取对象的类型信息,利用这一特性我们可以实现工厂模式和代理模式等设计模式,同时也可以解决Java泛型擦除等令人苦恼的问题。下面java课程http://www.kmbdqn.com/就从实际应用的角度出发,来应用一下Java的反射机制。
反射基础
p.s:本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的QuickStart。
在应用反射机制之前,首先我们先来看一下如何获取一个对象对应的反射类Class,在Java中我们有三种方法可以获取一个对象的反射类。
通过getClass方法
在Java中,每一个Object都有一个getClass方法,通过getClass方法我们可以获取到这个对象对应的反射类:
Strings="ziwenxie";
Class<?>c=s.getClass();
通过forName方法
我们也可以调用Class类的静态方法forName:
Class<?>c=Class.forName("java.lang.String");
使用.class
或者我们也可以直接使用.class:
Class<?>c=String.class;
获取类型信息
在文章开头我们就提到反射的一大好处就是可以允许我们在运行期间获取对象的类型信息,下面我们通过一个例子来具体看一下。
首先我们在typeinfo.interfacea包下面新建一个接口A:
packagetypeinfo.interfacea;
publicinterfaceA{voidf();}
接着我们在typeinfo.packageaccess包下面新建一个接口C,接口C继承自接口A,并且我们还另外创建了几个用于测试的方法,注意下面几个方法的权限都是不同的。
F. java 反射:怎么取出类的泛型类
这是一个泛型方法,返回值是Class类型的看看这个返回值类型是Class类型
G. java反射:怎么取出类的泛型类
T.getClass()或者T.class都是非法的,因为T是泛型变量。
由于一个类的类型是什么是在编译期处理的,故不能在运行时直接在Base里得到T的实际类型。
有一种变通的实现方式:
import java.lang.reflect.Array;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class Generic extends Base<String> {
public static void main(String[] args) {
Generic c = new Generic();
System.out.println(c.array);
}
Object array ;
public Generic() {
array = Array.newInstance(getGenericType(0), 100);
}
}
class Base<T> {
public Class getGenericType(int index) {
Type genType = getClass().getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
return Object.class;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
throw new RuntimeException("Index outof bounds");
}
if (!(params[index] instanceof Class)) {
return Object.class;
}