Написание синтетического / бридж-метода в Java - PullRequest
5 голосов
/ 19 июля 2011

Я пишу приложение, которое проверяет, является ли метод синтетическим или мостовым.Для тестирования этого приложения я добавил различные методы в мою заглушку.Но ни для одного из методов этот блок не рассматривается в тестовом примере.Заглушка содержит такие методы, как validate (Object o) и т. Д., Как и любой другой обычный класс Java.

Какой метод я должен добавить в мою заглушку, чтобы эта строка была покрыта?

code:

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

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

1 Ответ

3 голосов
/ 19 июля 2011

Методы моста в 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;
    }
}


См. Также

...