2013-12-22 18 views
1

当我在比较器中使用比较器时,在我的面试中遇到了一个问题,那就是在排序泛型类的对象时(可以说“Employee类”的对象包含变量“EmpId”和“EmpName”我的Collection.sort()方法然后我需要使用“新”关键字与比较。我们都知道比较器是一个接口,它不能被实例化。那么我们如何以及为什么使用“新”关键字呢?正如我发现这个问题很有趣,我想与大家分享。任何帮助表示赞赏。这里是示例代码的部分我张贴: -带比较器接口的“新”关键字

ArrayList<Employee> emp= new ArrayLisy<Employee>(); 
Collection.sort(emp, new Comparator(){ 
    public int compare(emp e1, emp e2) 
    { 
     if(e1.getId>e2.getId) 
     { 
      return 1; 
     } 
     if(e1.getId<e2.getId) 
     { 
      return -1; 
     } 
     else 
      return 0; 
    } 
}) 

我的问题是为什么我们用在这里比较接口的“新”的关键字?由于

+6

查找“anonymous class”。该代码声明了一个实现Comparator的未命名类,仅用于创建一个对象,sort参数。 –

+0

@PatriciaShanahan实际上,它被命名。创建一个匿名类实例并执行'obj.getClass()。getName()',你会明白我的意思。 – Bohemian

回答

1

我猜你正在通过思考,我们如何才能创建接口的对象困惑 - 但也只是anonymous class正在实施

new Comparator() { // anonymous class body  
     public int compare(emp e1, emp e2) { 
      if (e1.getId > e2.getId) { 
       return 1; 
      } 
      if (e1.getId < e2.getId) { 
       return -1; 
      } else 
       return 0; 
     } 
    } 
+0

请格式化您的代码。我意识到你只是复制了OP的代码,但它只需要很少的格式化它,它显示OP如何完成。 –

+0

@BoristheSpider是的,我应该早些完成 - 现在格式化 – exexzian

+0

家伙。谢谢你的答案。大的帮助。我也不知道“匿名类”的概念,所以今天我学到了一件新事物。现在这个概念对我来说很清楚。谢谢你们。 –

3

代码不实例化的界面,而是一个匿名类它实现比较器

一个匿名类是一个没有名字的本地类。使用new运算符在一个简洁的表达式中定义并实例化一个匿名类。

回答采纳于此Thread