[#] Простой Java-код, ломающий систему типов Scala
habrabot(difrex,1) — All
2017-08-21 16:00:05


Простой код на 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