2011-07-19 8 views
4

私はメソッドがsythenticかbridgeかをチェックするアプリケーションを書いています。 このアプリケーションをテストするために、スタブにさまざまなメソッドを追加しました。 しかし、いずれの方法についても、このブロックはテストケースでカバーされています。 スタブには、validate(Object o)などのメソッドが他の通常のJavaクラスと同様に含まれています。Synthetic/BridgeメソッドをJavaで書く

私のスタブにはどのような方法を追加すればよいでしょうか?

コード:Javaで

 Method[] methods = inputClass.getMethods(); 
     for (Method method : methods) { 

     if (method.isSynthetic() || method.isBridge()) { 
      isInternal = true; 
     } 
     // More code. 
    } 

答えて

2

ブリッジメソッドは、Java言語の機能の一部を実装するために必要な合成法、です。最もよく知られているサンプルは、共変リターン型であり、基本メソッドの引数の消去が呼び出された実際のメソッドと異なる場合、ジェネリックのケースです。

import java.lang.reflect.*; 

/** 
* 
* @author Administrator 
*/ 
class SampleTwo { 

    public static class A<T> { 

     public T getT(T args) { 
      return args; 
     } 
    } 

    static class B extends A<String> { 

     public String getT(String args) { 
      return args; 
     } 
    } 
} 

public class BridgeTEst { 

    public static void main(String[] args) { 
     test(SampleTwo.B.class); 
    } 

    public static boolean test(Class c) { 
     Method[] methods = c.getMethods(); 
     for (Method method : methods) { 

      if (method.isSynthetic() || method.isBridge()) { 
       System.out.println("Method Name = "+method.getName()); 
       System.out.println("Method isBridge = "+method.isBridge()); 
       System.out.println("Method isSynthetic = "+method.isSynthetic()); 
       return true; 
      } 
     // More code. 
     } 
     return false; 
    } 
} 


+2

私はそれが共同veriantの戻り値の型のようだと思う。スーパークラスメソッドが、Objectとサブクラスのオーバーライドを共バリアント型(ex。Stringなど)で返すとき、これはブリッジと合成に対してもtrueを返します。コードは書いてありますが、私はこのコメントスペースに投稿できません。 –

関連する問題