通过reflect中得到数组类型
kingfish 2005.3
今天看到一个关于通过反射如何得到数组类型的问题,试了试,可以通过Array类解决。
做个记录。
代码如下:
import java.lang.reflect.*;
/** * @author kingfish * * TODO java reflect */class MyString{ public MyString(String s){ System.out.println("in constructor of the MyString"); } }
public class TestReflect { /** * 构造函数 * @param i */ public TestReflect(int i){ System.out.println("just for test"); } public void test(){ } public void test(MyString s){ } public void test(MyString[] args){ } public static void main(String[] args) throws Exception{ Class c = Class.forName("TestReflect"); Method m = c.getMethod("test", new Class[]{}); System.out.println(m); //反射test(MyString)方法 m = c.getMethod("test", new Class[]{MyString.class}); System.out.println(m); //反射test(MyString)方法, 并且要求MyString类也需要反射获得 m = c.getMethod("test", new Class[]{Class.forName("MyString")}); System.out.println(m); //反射test(MyString[])方法, 要求MyString[] 类型也反射获得 //Array.newInstance返回类型数组,并不产生类的实例 m = c.getMethod("test", new Class[]{Array.newInstance(Class.forName("MyString"),1).getClass()}); System.out.println(m); }}
kingfish 2005.3
今天看到一个关于通过反射如何得到数组类型的问题,试了试,可以通过Array类解决。
做个记录。
代码如下:
import java.lang.reflect.*;
/** * @author kingfish * * TODO java reflect */class MyString{ public MyString(String s){ System.out.println("in constructor of the MyString"); } }
public class TestReflect { /** * 构造函数 * @param i */ public TestReflect(int i){ System.out.println("just for test"); } public void test(){ } public void test(MyString s){ } public void test(MyString[] args){ } public static void main(String[] args) throws Exception{ Class c = Class.forName("TestReflect"); Method m = c.getMethod("test", new Class[]{}); System.out.println(m); //反射test(MyString)方法 m = c.getMethod("test", new Class[]{MyString.class}); System.out.println(m); //反射test(MyString)方法, 并且要求MyString类也需要反射获得 m = c.getMethod("test", new Class[]{Class.forName("MyString")}); System.out.println(m); //反射test(MyString[])方法, 要求MyString[] 类型也反射获得 //Array.newInstance返回类型数组,并不产生类的实例 m = c.getMethod("test", new Class[]{Array.newInstance(Class.forName("MyString"),1).getClass()}); System.out.println(m); }}