Table of Contents
Java Generics
1. Basics
2. Interfaces
Sometimes Java compiler must create synthetic methods (in this case called bridge methods) to make overriding work with generic types. For example:
interface TestInterface<T> {
void consume(T value);
}
class TestClass implements TestInterface<Integer> {
@Override
public void consume(Integer value) {
System.out.println(value);
}
}
after type erasure becomes:
interface TestInterface {
void consume(Object value);
}
class TestClass implements TestInterface {
public void consume(Integer value) {
System.out.println(value);
}
}
and we can see that TestClass no longer overrides consume method from TestInterface. To solve this problem compiler adds following method to TestClass:
class TestClass implements TestInterface {
// bridge method added by compiler:
@Override public void consume(Object value) {
this.consume((Integer)value);
}
public void consume(Integer value) { ... }
}