操作类成员的类
java.lang.reflect.Member

操作字段
java.lang.reflect.Field
操作方法
java.lang.reflect.Method
操作构造器
java.lang.reflect.Constructor
实际操作
获取字段类型
public class Main {
public static String abc = "123";
private static List<String> a;
public static void main(String[] args) throws NoSuchFieldException {
Class c = Main.class;
Field field = c.getField("abc");
Field field1 = c.getDeclaredField("a");
System.out.println(field.getType());
System.out.println(field.getGenericType());
System.out.println();
System.out.println(field1.getType());
System.out.println(field1.getGenericType());
}
}
class java.lang.String
class java.lang.String
interface java.util.List
java.util.List<java.lang.String>
获取字段修饰符
public class Main {
public static int a = 1;
public static void main(String[] args) throws NoSuchFieldException {
Class c = Main.class;
Field field = c.getField("a");
System.out.println(Modifier.isPublic(field.getModifiers()));
System.out.println(Modifier.isStatic(field.getModifiers()));
}
}
读写字段值
private static int a = 1;
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
Class c = Main.class;
Field field = c.getDeclaredField("a");
int b = field.getInt(Main.class);
System.out.println(b);
field.setInt(Main.class, 2);
System.out.println(a);
field.setFloat(Main.class, (float) 1.1); // 报异常
}
操作方法和构造器
构造器创建实例
public class Main {
public Main() {
}
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, InstantiationException {
Class c = Main.class;
Constructor[] ctors = c.getConstructors();
Constructor ctor = null;
for (int i = 0; i < ctors.length; i++) {
ctor = ctors[i];
if (ctor.getGenericParameterTypes().length == 0) // 需要找到默认构造函数创建实例
break;
}
System.out.println(ctor.newInstance().getClass().getCanonicalName());
}
}
结尾
文章转载自程序员小岑成长记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




