import java.beans.IntrospectionException
import java.beans.PropertyDescriptor
import java.lang.reflect.InvocationTargetException
import java.lang.reflect.Method
import java.util.ArrayList
import java.util.Arrays
import java.util.Iterator
public class AList extends ArrayList<A> {
/**
*
*/
private static final long serialVersionUID = -5626405721508120479L
public A getSubject(String name, Object value)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException, IntrospectionException {
A[] result = getSubjects(name, value)
if (result.length <= 0)
return null
else
return result[0]
}
public A[] getSubjects(String name, Object value)
throws IntrospectionException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
PropertyDescriptor pd = new PropertyDescriptor(name, A.class)
Method getter = pd.getReadMethod()
Iterator<A> it = this.iterator()
A[] result = new A[0]
while (it.hasNext()) {
A obj = it.next()
Object theValue = getter.invoke(obj)
if (theValue != null && theValue.equals(value)) {
result = Arrays.copyOf(result, result.length + 1)
result[result.length - 1] = obj
}
}
return result
}
public static void main(String[] args) throws IllegalAccessException,
IllegalArgumentException, InvocationTargetException,
IntrospectionException {
AList al = new AList()
A a = new A("张三")
a.setAge(18)
a.setGender("男")
a.setSchool("XX大学")
A b = new A("李四")
b.setAge(20)
b.setGender("男")
b.setSchool("XX大学")
A c = new A("王五")
c.setAge(18)
c.setGender("女")
c.setSchool("XX大学")
al.add(a)
al.add(b)
al.add(c)
System.out.println(Arrays.toString(al.getSubjects("name", "张三")))
System.out.println(Arrays.toString(al.getSubjects("age", 18)))
System.out.println(Arrays.toString(al.getSubjects("gender", "男")))
System.out.println(Arrays.toString(al.getSubjects("school", "XX大学")))
// [A [name=张三, age=18, gender=男]]
// [A [name=张三, age=18, gender=男], A [name=王五, age=18, gender=女]]
// [A [name=张三, age=18, gender=男], A [name=李四, age=20, gender=男]]
// [A [name=张三, age=18, gender=男], A [name=李四, age=20, gender=男], A [name=王五, age=18, gender=女]]
}
}
class A {
private String name
private int age
private String gender
private String school
public String getSchool() {
return school
}
public void setSchool(String school) {
this.school = school
}
public A(String name) {
super()
this.name = name
}
public String getGender() {
return gender
}
public void setGender(String gender) {
this.gender = gender
}
public int getAge() {
return age
}
public void setAge(int age) {
this.age = age
}
public String getName() {
return name
}
public void setName(String name) {
this.name = name
}
@Override
public String toString() {
return "A [name=" + name + ", age=" + age + ", gender=" + gender + "]"
}
}
使用getClass方法可以获取一个对象的类型类,然后在调用该类的方法可以获取该类的相关信息,比如父类的名字,该类的名字等等:
package testimport java.lang.reflect.Field
import java.lang.reflect.Method
public class Demo2 {
String username = "sss"
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException {
Demo2 t = new Demo2()
if (Demo2.class == t.getClass()) {
System.out.println("equal")
}
// 获取类名
System.out.println(t.getClass().getName())
// 获取父类名
System.out.println(t.getClass().getSuperclass())
//获取类中某个属性
Field f = t.getClass().getField("username")
//获取类中某个方法
Method m = t.getClass().getDeclaredMethod("main", String[].class)
}
}