簡體   English   中英

在 java 中編寫 Synthetic/Bridge 方法

[英]Writing Synthetic/Bridge method in java

我正在編寫一個應用程序來檢查該方法是合成的還是橋接的。 為了測試這個應用程序,我在我的存根中添加了各種方法。 但是對於任何方法,這個塊都沒有被覆蓋在測試用例中。 存根包含 validate(Object o) 等方法,就像任何其他正常的 java class 一樣。

我應該在我的存根中添加什么樣的方法才能覆蓋這條線?

代碼:

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

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

Java 中的橋接方法是合成方法,是實現 Java 語言特性所必需的。 最知名的樣本是協變返回類型和 generics 中的一個案例,當擦除基本方法的 arguments 與實際調用的方法不同時。

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


也可以看看

在這里,我們列出了JDK中的示例 Java 方法標記為ACC_BRIDGE和/或ACC_SYNTHETIC ,因此可以通過反射使用它們來輕松覆蓋您的測試用例:

祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM