在java中编写Synthetic / Bridge方法

时间:2011-07-19 10:06:11

标签: java reflection stubbing java-bridge-method

我正在编写一个应用程序来检查该方法是否是synticntic或bridge。  为了测试这个应用程序,我在我的存根中添加了各种方法。  但是对于这个方法都没有涉及测试用例。  Stub包含像validate(Object o)等方法,就像任何其他普通的java类一样。

我应该在我的存根中添加什么样的方法,以便涵盖这一行?

代码:

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

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

2 个答案:

答案 0 :(得分:2)

Java中的桥接方法是合成方法,它们是实现某些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;
    }
}


另见

答案 1 :(得分:0)

我们在这里列出JDK中的示例Java方法,并用ACC_BRIDGE和/或ACC_SYNTHETIC进行标记,以便可以通过反射使用它们轻松地覆盖您的测试用例:

祝你好运!