2009-12-24 53 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

號你爲什麼不只是寫一個,編譯,並看到自己?

假設一個接口可以在一個方法內部聲明,它將不能在外部訪問。很難想象這種界面的有用性限制在一個塊中。另一方面,本地類可以是有用的,因爲它包含具體的實現。

相關問題