javareflectionjava-synthetic-methods

Java synthetic method and bridge method confusion


As stated in Effects of Type Erasure and Bridge Methods a bridge method implies that it is also a synthetic method. The question is, is it possible that invocation of isSynthetic method returns true but isBridge method returns false for a Method object, i.e., if a method is synthetic does it imply that it is also a bridge method?

It's not exactly the same but the source code for isSynthetic and isBridge methods looks like below:

static final int SYNTHETIC = 0x00001000;
public boolean isSynthetic() {
    return (getModifiers() & SYNTHETIC) != 0;
}

static final int BRIDGE = 0x00000040;
public boolean isBridge() {
    return (getModifiers() & BRIDGE) != 0;
}

Why isBridge method body is not like return isSynthetic();?


Solution

  • If you are simply looking for an example of such:

    Function<String, Integer> func = s -> s.length();
    
    Arrays.stream(DeleteMe.class.getDeclaredMethods())
         .peek(m -> System.out.println(m.getName() + " isSynth : " + m.isSynthetic() + " isBridge : " + m.isBridge()))
         .forEach(System.out::println);
    

    There will be entries like:

    lambda$0 isSynth : true isBridge : false
    lambda$1 isSynth : true isBridge : false