2016-07-28 52 views
-2

我採訪期間收到了這個問題,這個問題是如何確定是否類實現標記接口

如何確定是否類實現標記接口

如果沒有找到一種方法如何知道哪個標記接口實現

+0

爲什麼減去它是一個面試問題,我想澄清一下。是否有意義減號 – suresh

+3

您沒有顯示任何先前研究的跡象。我們的想法是,我們總是幫助你「更進一步」 - 假設你試圖自己完成第一步。在這裏丟掉一個問題「請向我解釋」並不算作「之前的研究」。 – GhostCat

+0

@GhostCat我試圖在谷歌找到解決方案,但我沒有找到任何解決方案,在結束選項留在了stackoverflow社區。 可能是我沒有太多關於這個話題的研究。 – suresh

回答

3

使用Class#getInterfaces()運行是這樣的:

確定由類或接口 此對象表示實現的接口。

如果此對象表示一個類,則返回值是一個數組 ,其中包含的對象表示由 類實現的所有接口。數組中接口對象的順序對應於 由此對象表示的類的聲明的implements子句中的接口名稱的順序。例如,給定 聲明:

class Shimmer implements FloorWax, DessertTopping { ... } 

假設s的值是微光的實例;所述 表達式的值:

s.getClass().getInterfaces()[0] 

是類對象,表示接口FloorWax;和值的 :

s.getClass().getInterfaces()[1] 

是表示接口DessertTopping的Class對象。

不過請注意,這種方法不適用於何處,而不是Shimmer超類實現的接口的情況下返回true,例如如下:

public interface FloorWax { } 

public interface DesertTopping { } 

public class Shimmer implements implements FloorWax, DessertTopping { } 

public class ShimmerChild extends Shimmer {} 

public static void main(String[] args) { 
    // throws ArrayOutOfBoundsException 
    System.out.println(new ShimmerChild().getClass().getInterfaces()[0]); 
} 

在一個情況下,你會想要以下要返回界面,請使用@DylanMeeus中所述的方法Class#isAssignableFrom()

+0

注意:雖然是正確的,但這只是事實的一部分。這種方法不會告訴你有關你正在查看的對象的超類實現的接口(所以我認爲)。 – GhostCat

+0

@GhostCat哦,有趣。我將不得不測試一下。 – Jokab

+0

也許我錯了,但它是你的答案;和你的名聲;所以它對你的興趣來看看;-) – GhostCat

6

爲此,您可以使用類似

if(MarkerInterface.class.isAssignableFrom(otherClass.class))

想象一下,您有一個名爲MarkerInterface的接口和一個OtherClass implements MarkerInterface類。

你可以在主

if(MarkerInterface.class.isAssignableFrom(OtherClass.class)) 
{ 
    System.out.println("Otherclass uses the MarkerInterface"); 
} 
相關問題