Написание синтетического / бридж-метода в Java
Я пишу приложение, которое проверяет, является ли метод синтетическим или мостовым. Для тестирования этого приложения я добавил различные методы в мою заглушку. Но ни для одного из методов этот блок не рассматривается в тестовом примере. Stub содержит такие методы, как validate(Object o) и т. Д., Как и любой другой обычный класс Java.
Какой метод я должен добавить в мою заглушку, чтобы эта строка была покрыта?
код:
Method[] methods = inputClass.getMethods();
for (Method method : methods) {
if (method.isSynthetic() || method.isBridge()) {
isInternal = true;
}
// More code.
}
1 ответ
Методы моста в 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;
}
}
Смотрите также
Здесь мы перечисляем примеры Java-методов в JDK с тегамиACC_BRIDGE
и / или ACC_SYNTHETIC
, поэтому их можно использовать через отражение, чтобы легко охватить ваш тестовый пример:
- Метод java.math.BigDecimal.compareTo(Object) одновременно
ACC_BRIDGE
а такжеACC_SYNTHETIC
- Метод java.lang.AbstractStringBuilder.lambda $ chars $0() - это
ACC_SYNTHETIC
Удачи!