2016-07-28 1 views
-2

を実装している場合、質問が見つける方法がある場合は、クラスがマーカーインターフェイスクラスは、私はインタビューの中でこの質問を受けたマーカーインターフェイス

を実施しているかどうかを確認する方法

ある方法を特定します、マーカーインタフェースが

+0

なぜ私は明確にしたいインタビューの質問だった。マイナスには意味があります – suresh

+3

あなたは以前の研究の兆候を見せていません。アイデアは、あなたが最初のステップを自分で作ろうとしていたと仮定して、私たちが常にあなたに「一歩前進」を手助けするということです。ここに質問をドロップすると「私に説明してください」は「先行研究」としてカウントされません。 – GhostCat

+0

@GhostCat私はgoogleで解決策を見つけようとしましたが、最後のオプションで、stackoverflow Communityに残った解決策は見つかりませんでした。 このトピックについてはあまり研究を重ねていないかもしれません。 – suresh

答えて

3

使用Class#getInterfaces()にこのような何かを実行することができます:

は、このオブジェクトによって表されるクラスまたはインタフェース が実装するインタフェースを決定します。

このオブジェクトがクラスを表す場合、戻り値は クラスによって実装されたすべてのインターフェイスを表すオブジェクトを含む配列 です。配列内のインタフェースオブジェクトの順序は、 に対応し、このオブジェクトが表すクラスの 宣言のimplements句のインタフェース名の順番に対応します。例えば、 宣言を与え:

class Shimmer implements FloorWax, DessertTopping { ... } 

は、Sの値は、シマーのインスタンスであると仮定する。 式の値:

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

インターフェイスはFloorWaxを表すクラスのオブジェクトです。そして、の値 :

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

はDessertToppingインタフェースを表すクラスオブジェクトです。

注しかし、このアプローチは、以下のように、たとえば、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

を実装されているかを知るためにどのようにあなたは

のようなものを使用してこれを行うことができます

MarkerInterfaceという名前のインターフェイスとOtherClass implements MarkerInterfaceという名前のインターフェイスがあるとします。

あなたがメイン

if(MarkerInterface.class.isAssignableFrom(OtherClass.class)) 
{ 
    System.out.println("Otherclass uses the MarkerInterface"); 
} 
関連する問題