package a1;
public class Book
{
private int id;
private String name;
public int getId()
{
return id;
}
@Override
public String toString()
{
// TODO Auto-generated method stub
return "编号:"+id+"名字:"+name;
}
public void setId(int id)
{
this.id = id;
}
public Book(int id, String name)
{
super();
this.id = id;
this.name = name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
package a1;
import java.util.Arrays;
public class ComparatorTest
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
Book b1=new Book(8,"java");
Book b2=new Book(3,"C语言");
Friut f1=new Friut(6,"apple");
Object [] oo={b1,b2,f1};
Arrays.sort(oo, new MyComparator());
System.out.println(Arrays.toString(oo));
}
}
package a1;
public class Friut
{
private int id;
private String name;
public int getId()
{
return id;
}
@Override
public String toString()
{
// TODO Auto-generated method stub
return "编号:"+id+"名称:"+name;
}
public void setId(int id)
{
this.id = id;
}
public Friut(int id, String name)
{
super();
this.id = id;
this.name = name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
package a1;
import java.lang.reflect.Method;
import java.util.Comparator;
/**
*
* @author zyf
*@see 通用比较器 要求:必须有相同的字段
*/
public class MyComparator implements Comparator
{
@Override
public int compare(Object o1, Object o2)
{
//获取类的自描述对象
Class c1=o1.getClass();
Class c2=o2.getClass();
//Field f1,f2;
Method m1,m2;
Integer id1=null,id2=null;
try
{
//获取字段的自描述对象
//f1=c1.getDeclaredField("id");
//f2=c2.getDeclaredField("id");
//id1=f1.getInt(o1);
//id2=f2.getInt(o2);
//返回get方法的描述对象
m1=c1.getDeclaredMethod("getId");
m2=c2.getDeclaredMethod("getId");
id1=(Integer) m1.invoke(o1);
id2=(Integer) m2.invoke(o2);
//从对象中得到字段值
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return id1.compareTo(id2);
}
}