[英]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
,因此可以通過反射使用它們來輕松覆蓋您的測試用例:
ACC_BRIDGE
和ACC_SYNTHETIC
ACC_SYNTHETIC
祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.