5

我正在编写一个应用程序来检查该方法是合成的还是桥接的。为了测试这个应用程序,我在我的存根中添加了各种方法。但是对于任何方法,这个块都没有被覆盖在测试用例中。存根包含 validate(Object o) 等方法,就像任何其他普通的 java 类一样。

我应该在我的存根中添加什么样的方法才能覆盖这条线?

代码 :

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

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

2 回答 2

3

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;
    }
}


也可以看看

于 2011-07-19T10:32:22.343 回答
0

在这里,我们列出了JDKACC_BRIDGE中带有和/或标记的示例 Java 方法ACC_SYNTHETIC,因此可以通过反射使用它们来轻松地覆盖您的测试用例:

祝你好运!

于 2019-10-23T05:33:16.017 回答