A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯华亮 中级黑马   /  2012-8-7 14:02  /  1603 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是这样 我在Student类中定义了一个私有类SortMethod,它实现了Comparator<Student>接口,覆盖了方法compare(T t1,T  t2),在MainTest测试主类调用Collections.sort(List<T> t,Comparator<T> com).现在我想在Student类中直接获取该类的一个实例,直接传给MainTest类中Collections.sort()方法。问题出来了,该如何通过Student类来获取SortMethod的对象。我仿造c#的方法。结果行不通。下面是代码,红色字体部分。望不吝解析,谢谢!!
  1. import java.util.Comparator;
  2. class Student implements Comparable<Student> {
  3.         private String stuname;
  4.         private int maths;
  5.         private int ens;
  6.         private int phs;
  7.         private int sum;
  8.         public Student(){}
  9.         public Student(String name,int maths,int ens,int phs ) {
  10.                 this.stuname=name;
  11.                 this.maths=maths;
  12.                 this.ens=ens;
  13.                 this.phs=phs;
  14.                 sum=maths+ens+phs;
  15.         }
  16.         public String getStuName(){
  17.                 return this.stuname;
  18.         }
  19.         public int getSum(){
  20.                 return this.sum;
  21.         }
  22.         public int compareTo(Student stu){
  23.                 if(this.sum>stu.sum)
  24.                         return 1;
  25.                 if(this.sum<stu.sum)
  26.                         return -1;
  27.                 else
  28.                         return 0;
  29.         }
  30.         public int hasCode(){
  31.                 return this.stuname.hashCode()+sum*12;
  32.         }
  33.         public boolean equals(Object obj){
  34.                 if(!(obj instanceof Student))
  35.                 {
  36.                         throw new ClassCastException("类型不匹配");
  37.                 }               
  38.                 Student student=(Student)obj;
  39.                 return this.stuname.equals(student.stuname)&&this.sum==student.sum;
  40.                
  41.         }
  42.         public String toString(){
  43.                 return "学生信息:"+this.stuname+"----"+this.sum;
  44. }
  45. <font color="red">private class SortMethod implements Comparator<Student>{
  46.                 public int compare(Student stu1,Student stu2){
  47.                 return stu1.stuname.compareTo(stu2.stuname);
  48. }
  49. <font color="blue">//这是我仿造c#写的获取类SortMethod对象的方法,该行报错
  50. </font> public static Comparator<Student> getInstance{
  51.          get{ return new SortMethod();};
  52. <font color="#0000ff">/*别告诉我这样 public  Comparator<Student> getInstance(){
  53.   return new SortMethod()},这样没法在类外通过Student类名调用*/</font> </font>
  54. }
  55. }
复制代码

3 个回复

倒序浏览
private  static class SortMethod implements Comparator<Student>{//SortMethod 必须声明为静态类,否则不能调用下面的静态方法


    public int compare(Student stu1,Student stu2)
    {
       return stu1.stuname.compareTo(stu2.stuname);
    }
   
   
    public static Comparator<Student> getIntance()//方法 getIntance 不能声明为“静态”;只能在静态类型或顶级类型中才能声明静态方法,
    {
             return new SortMethod();
    }
}

回复 使用道具 举报
  1. import java.util.Comparator;

  2. class Student implements Comparable<Student> {

  3. private String stuname;

  4. private int maths;

  5. private int ens;

  6. private int phs;

  7. private int sum;

  8. <FONT color=red>public SortMethod sortMethod ;
  9. public Student(){sortMethod =new SortMethod();}

  10. public Student(String name,int maths,int ens,int phs ) {
  11. sortMethod =new SortMethod();
  12. </FONT>this.stuname=name;

  13. this.maths=maths;

  14. this.ens=ens;

  15. this.phs=phs;

  16. sum=maths+ens+phs;

  17. }

  18. public String getStuName(){

  19. return this.stuname;

  20. }

  21. public int getSum(){

  22. return this.sum;

  23. }

  24. public int compareTo(Student stu){

  25. if(this.sum>stu.sum)

  26. return 1;

  27. if(this.sum<stu.sum)

  28. return -1;

  29. else

  30. return 0;

  31. }

  32. public int hasCode(){

  33. return this.stuname.hashCode()+sum*12;

  34. }

  35. public boolean equals(Object obj){

  36. if(!(obj instanceof Student))

  37. {

  38. throw new ClassCastException("类型不匹配");

  39. }

  40. Student student=(Student)obj;

  41. return this.stuname.equals(student.stuname)&&this.sum==student.sum;



  42. }

  43. public String toString(){

  44. return "学生信息:"+this.stuname+"----"+this.sum;

  45. }

  46. class SortMethod implements Comparator<Student>{

  47. public int compare(Student stu1,Student stu2){

  48. return stu1.stuname.compareTo(stu2.stuname);

  49. }
  50. }
  51. }


复制代码
回复 使用道具 举报
本帖最后由 冯华亮 于 2012-8-7 18:04 编辑
杜鹏云 发表于 2012-8-7 17:10
private  static class SortMethod implements Comparator{//SortMethod 必须声明为静态类,否则不能调用下 ...

我这里的getIntance不是方法 是属性。我想模仿c#中的属性Get方法来获取的!
应该把getInstance()放在Student类,而不是SortMethod类中,要不外界怎么能使用类SortMethod啊!
private  static class SortMethod implements Comparator<Student>{
    public int compare(Student stu1,Student stu2){
           return stu1.stuname.compareTo(stu2.stuname);
         }
}
public static Comparator<Student> getIntance()//方法 getIntance 不能声明为“静态”;只能在静态类型或顶级类型中才能声明静态方法,
    {
    return new SortMethod();
    }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马