JAva反射メカニズムの詳細とインスタンスコード
8775 ワード
JAva反射メカニズム:
エンティティクラスのテスト
ヒューマンを例に
構築方法のテスト
テスト取得フィールド
取得方法のテスト
クラス情報のテスト
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!
エンティティクラスのテスト
ヒューマンを例に
/**
* Project: Day12_for_lxy
* Created: Lulu
* Date: 2016/8/10
*/
public class Human {
private String name;
private int age;
private float height;
private static int legs = 2;
private Map jobs;
private T t;
public int say() {
System.out.println("I'm" + name);
return 0;
}
private void sleep(Human human) {
System.out.println(name + " sleep with " + human.name);
}
public List getList() {
return new ArrayList<>();
}
public Human() {
}
private Human(String name, int age, float height) {
this.name = name;
this.age = age;
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 150 || age < 0) {
throw new RuntimeException("age > 150 || age < 0");
}
this.age = age;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
@Override
public String toString() {
return "Human{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
}
構築方法のテスト
/**
* Project: Day12_for_lxy
* Created: Lulu
* Date: 2016/8/10
*/
/*
*/
public class TestConstructor {
public static void main(String[] args) {
// , Human
Class humanClass = Human.class;
try {
////
// // , (public)
// Constructor constructor1 = humanClass.getConstructor(String.class, Integer.TYPE, Float.TYPE);
//
// Human h1 = constructor1.newInstance(" ", 18, 1.85f);
// System.out.println(h1.toString());
//
// // ,
// int modifiers = constructor1.getModifiers();
// if (Modifier.isPublic(modifiers)) {
// System.out.println(" public");
// }
// //// ,
// Constructor constructor2 = humanClass.getDeclaredConstructor(String.class, Integer.TYPE, Float.TYPE);
// //
// constructor2.setAccessible(true);
// // ,
// Human human2 = constructor2.newInstance("zll", 18, 1.80f);
// System.out.println(human2.toString());
//
Constructor>[] constructors = humanClass.getDeclaredConstructors();
for (Constructor> c : constructors) {
c.setAccessible(true);
System.out.println(c.getName());
System.out.println("===========================");
//
Class>[] types = c.getParameterTypes();
for (Class> type : types) {
System.out.println(type.getTypeName());
}
//
int modifiers = c.getModifiers();
if (Modifier.isPublic(modifiers)) {
System.out.println(" ");
}else if (Modifier.isPrivate(modifiers)){
System.out.println(" ");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
テスト取得フィールド
/**
* Project: Day12_for_lxy
* Created: Lulu
* Date: 2016/8/10
*/
/*
:
:( )
*/
public class TestField {
public static void main(String[] args) {
Class humanClass = Human.class;
Field[] fields = humanClass.getDeclaredFields();
for (Field f : fields) {
//
System.out.print(" : " + f.getName() + " ");
System.out.println();
//
System.out.print(" :" + f.getType() + " ");
System.out.println();
//
int modifiers = f.getModifiers();
if (Modifier.isPublic(modifiers)) {
System.out.println(" ");
} else if (Modifier.isPrivate(modifiers)) {
System.out.println(" ");
}
}
System.out.println("============================ ==================================");
try {
// jobs
Field jobs = humanClass.getDeclaredField("jobs");
//
ParameterizedType type = (ParameterizedType) jobs.getAnnotatedType().getType();
Type[] types = type.getActualTypeArguments();
for (Type type1 : types) {
System.out.println(type1);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("=================== , ============================");
try {
Human
取得方法のテスト
/**
* Project: Day12_for_lxy
* Created: Lulu
* Date: 2016/8/10
*/
/*
:
*/
public class TestMethod {
public static void main(String[] args) {
Class humanClass = Human.class;
//
Method[] ms = humanClass.getDeclaredMethods();
for (Method m : ms) {
m.setAccessible(true);
System.out.print(" : " + m.getName() + " " );
int modifiers = m.getModifiers();
if (Modifier.isPublic(modifiers)) {
System.out.println(" ");
} else if (Modifier.isPrivate(modifiers)) {
System.out.println(" ");
}
}
// ,
try {
//
Method sayM = humanClass.getDeclaredMethod("say");
Class> returnType = sayM.getReturnType();
System.out.println(returnType.toString());
//
Method getListM = humanClass.getDeclaredMethod("getList");
System.out.println(getListM.getReturnType());
ParameterizedType type = (ParameterizedType) getListM.getAnnotatedReturnType().getType();
System.out.println(type);
Type[] ts = type.getActualTypeArguments();
for (Type t : ts) {
System.out.println(t);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
クラス情報のテスト
public static void main(String[] args) {
printClassInfo(Student.class);
}
public static void printClassInfo(Class c){
//Java Object
System.out.println(c.getName());
System.out.println(c.getSimpleName());
System.out.println(c.getSuperclass());
Class[] interfaces = c.getInterfaces();
for (Class anInterface : interfaces) {
System.out.println(anInterface);
}
// (public default)
int modifiers = c.getModifiers();
}
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!