Java反射通过类名字符串创建实例(带参数并判断参数类型)

Jian_Ming 发布于 2015/03/13 11:27
阅读 2K+
收藏 0
private Object newObjectInstanceWithParams(String classname, Object[] params) {
    	Object instance = null;
    	try {
			Class classType = Class.forName(classname);
			
			Constructor<?>[] consts = classType.getConstructors();
	        Constructor<?> constructor = null;
	        for(int i = 0; i < consts.length; i++) {
	        	int paramsLength = consts[i].getParameterAnnotations().length;
	        	//判断多少个参数,我想在这添加参数的类型,因为有一个类的2个构造函数都要2个参,但是类型不同
	        	if(paramsLength == params.length) {
	        		constructor = consts[i];
	        		break;
	        	}
	        }
	        
	        if(constructor != null) {
	        	Class<?>[] type = constructor.getParameterTypes();
	        	instance = classType.getConstructor(type).newInstance(params);
	        }
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    	return instance;
    }

我应该怎么获得并判断参数的类型?谢谢!!~


加载中
0
太原随风
太原随风
Constructor<?>[] anns=Test.class.getDeclaredConstructors();
Class[] parameterTypes=anns[0].getParameterTypes();
Jian_Ming
Jian_Ming
谢谢,之前不确定是不是这个!!
0
Cobbage
Cobbage
fied.gettype
Jian_Ming
Jian_Ming
??是哪个的getType()?能详细些吗?谢谢
0
太原随风
太原随风

Field[] fields=object.getClass().getFields();

for(Field f:fields){

    f.getType instanceof Boolean

}

Jian_Ming
Jian_Ming
谢谢,但是这个类有不同的构造函数呢?
0
太原随风
太原随风
你是要 判断 构造函数中参数的数据类型?
Jian_Ming
Jian_Ming
对的,因为我在一个类中,它有2个构造函数,都是带2个参数的,但是第二个参数的类型不同
0
太原随风
太原随风
根据返回的parameterTypes判断第二个参数的不同。
0
太原随风
太原随风
Constructor<?>[] anns=sss.class.getDeclaredConstructors();
for(Constructor c:anns){
Class[] parameterTypes=anns[0].getParameterTypes();
System.out.println(c.getName());
for(Class a:parameterTypes){
System.out.println("==="+a.getSimpleName());
}
}

返回顶部
顶部