Простой код на Java: generic интерфейс, класс который его реализует, и метод, принимающий его экземпляр:
//Gen.java:
public interface Gen {
A value();
}
//GenInt.java:
public class GenInt implements Gen {
private final int i;
public GenInt(int i) {
this.i = i;
}
@Override
public Integer value() {
return i;
}
}
//GenTest.java:
public class GenTest {
public static T test(A a) {
return a.value();
}
public static void main(String[] argv) {
GenInt g = new GenInt(42);
Integer i = test(g);
}
}
Он компилируется и даже запускается. Как вы думаете, что будет, если вам захочется вызывать метод `test` из Scala?
object TestFail extends App {
val genInt = new GenInt(42)
val i = GenTest.test(genInt)
} [Что может пойти не так?][1]
[1]:
https://habrahabr.ru/post/335812/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut