package com.city.yf.reflector;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.util.Arrays;
public class Test {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
class PartClass {
}
Class<?> cls = Class.forName("com.city.yf.reflector.User");
System.out.println("name:" + cls.getName());
System.out.println("canonicalName:" + cls.getCanonicalName());
System.out.println("modifier:" + cls.getModifiers());
System.out.println("modifier:" + Modifier.toString(cls.getModifiers()));
System.out.println("simpleName:" + cls.getSimpleName());
System.out.println("typeName:" + cls.getTypeName());
System.out.println("annotation:" + cls.isAnnotation());// 注解
System.out.println("annotationOf:" + cls.isAnnotationPresent(SuppressWarnings.class));
System.out.println("anonymous:" + cls.isAnonymousClass());
System.out.println("isArray:" + cls.isArray());
System.out.println("isArray:" + new User[] {}.getClass().isArray());
System.out.println("assignableFrom:" + People.class.isAssignableFrom(User.class));
System.out.println("isEnum:" + cls.isEnum());
System.out.println("isInstance:" + cls.isInstance(new User()));
System.out.println("isInterface:" + cls.isInterface());
System.out.println("isLocalClass:" + PartClass.class.isLocalClass());// 當(dāng)且僅當(dāng)基礎(chǔ)類是局部類
System.out.println("isMemberClass:" + InnerClass.class.isMemberClass());// 成員內(nèi)部類
System.out.println("isPrimitive:" + cls.isPrimitive());// 基本數(shù)據(jù)類型,非他們的包裝類
System.out.println("isPrimitive:" + Integer.TYPE.isPrimitive() + Integer.class.isPrimitive());// Integer.Type==int.class
System.out.println("isSynthetic:" + cls.isSynthetic());// Proxies. TODO
System.out.println("asSubClass:" + cls.asSubclass(People.class));// cls轉(zhuǎn)換為people的子類
System.out.println("case:" + ((User) cls.cast(new User())).age);
System.out.println("getAnnotatedInterfaces:");
Arrays.asList(cls.getAnnotatedInterfaces()).stream().forEach(System.out::println);
System.out.println("getAnnotatedSuperclass:" + cls.getAnnotatedSuperclass());
System.out.println("componentType:" + new String[] {}.getClass().getComponentType());
System.out.println("getConstructors:" + cls.getConstructors().length);
Constructor<?>[] constructors = cls.getConstructors();
for (Constructor<?> constructor : constructors) {
if (constructor.getParameterCount() > 0) {
User user = (User) constructor.newInstance("F");
System.out.println(user.age + "\t" + user.name);
} else {
User user = (User) constructor.newInstance();
System.out.println(user.age + "\t" + user.name);
}
}
System.out.println(((User) cls.getConstructor(String.class).newInstance("hahaha")).name);
Field[] fields = cls.getDeclaredFields();// 返回全部字段,不包含繼承的
for (Field field : fields) {
String name = field.getName();
String modifier = Modifier.toString(field.getModifiers());
Class<?> fieldCls = field.getType();
System.out.println(String.format("%s %s %s", modifier, fieldCls.toString(), name));
}
fields = cls.getFields();// 返回 public 字段
for (Field field : fields) {
String name = field.getName();
String modifier = Modifier.toString(field.getModifiers());
Class<?> fieldCls = field.getType();
System.out.println(String.format("%s %s %s", modifier, fieldCls.toString(), name));
}
User user = new User();
user.age = 10;
user.name = "hyx";
Field idField = cls.getDeclaredField("id");
idField.setAccessible(true);
System.out.println(idField.get(user));
Method[] methods = cls.getDeclaredMethods();
for (Method method : methods) {
String name = method.getName();
Type[] paramTypes = method.getGenericParameterTypes();
Type returnType = method.getGenericReturnType();
String modifier = Modifier.toString(method.getModifiers());
System.out.print(modifier + " " + returnType.toString() + " " + name + "( ");
Arrays.asList(paramTypes).stream().forEach(i -> System.out.print(i + ","));
System.out.println(")");
}
Method method = cls.getMethod("test4", null);//only public
String result = (String) method.invoke(new User());
System.out.println("result of invoking test4:" + result);
method = cls.getDeclaredMethod("test2", null);//all methods
method.setAccessible(true);
method.invoke(new User());
}
class InnerClass {
}
interface ITest {
}
}
Java 反射
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 泛型反射 在運(yùn)行時(shí),泛型是無效的,所以可以通過反射在運(yùn)行時(shí)將其他類型變量添加到集合,而不需要考慮泛型
- 一、概述 1、Java反射機(jī)制(Java-Reflect): 在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類中的所...