2009-12-24 51 views
1

我知道那可以在类的方法中有类声明。例如,我们可以在方法体中为事件处理设置匿名类声明。我可以在方法中使用接口吗?

但我想知道,我可以在类中的方法中使用接口声明。

这有什么用?

+0

在阅读fastcodejava的文章后,我想我误解了OP。你的意思是在一个方法内的内部/匿名接口? – 2009-12-24 07:26:45

+1

请举例说明你的意思。 – 2009-12-24 10:43:08

回答

1

我'假设你指的是返回一个方法的接口?

简答:是的。

为什么?

这是一篇很好的文章。
Why we return type Mostly Interface rather than Class?

摘录:

的好处是,返回一个 接口使它可以改变 后来实施。例如,你可能 一个,而你最好 更愿意使用一个LinkedList一个ArrayList,而不是 后决定.....

1

我不认为你可以声明一个方法内部的接口。你为什么想要? 您只能定义一个匿名内部类。

+1

嵌套接口是隐式静态的,不能在方法体中定义。 – 2009-12-24 07:28:40

0

你可以这样做,一个众所周知的例子是Comparator<T>接口。

例如:

List<Person> persons = personDAO.list(); 

Collections.sort(persons, new Comparator<Person>() { 
    // Anonymous inner class which implements Comparator interface. 
    public int compare(Person one, Person other) { 
     return one.getName().compareTo(other.getName()); 
    } 
}); 

有些人可能认为反对这个并告诉它,而所属的Person类,这样你就不需要任何需要的时候一次又一次地实现它。例如。

public class Person { 

    // ... 

    public static final Comparator<Person> ORDER_BY_NAME = new Comparator<Person>() { 
     public int compare(Person one, Person other) { 
      return one.getName().compareTo(other.getName()); 
     } 
    }; 
} 

可以如下使用:

Collections.sort(persons, Person.ORDER_BY_NAME); 
+1

我想你在你的例子中是一个匿名类,它是接口比较器的一个实例。但我认为OP的问题是接口声明是否可以存在于方法中,这在Java中是不可能的。还是我在这里想念什么? – sateesh 2009-12-24 11:05:55

+0

嗯,这没有任何意义。但我认为你是对的,这实际上是他的问题。我很好奇他想在哪里使用它。为了得到更好的答案,他至少需要用他想要实现的具体例子来编辑他的问题。 – BalusC 2009-12-24 11:38:02

1

号你为什么不只是写一个,编译,并看到自己?

假设一个接口可以在一个方法内部声明,它将不能在外部访问。很难想象这种界面的有用性限制在一个块中。另一方面,本地类可以是有用的,因为它包含具体的实现。

相关问题