5 ms·
Well it all depends how you handle `null` at the boundary between the two languages. In Ceylon, we let you write either: String str = javaObject.javaMethod
by gavinking 12y ago
Well it all depends how you handle `null` at the boundary between the two languages. In Ceylon, we let you write either:
String str = javaObject.javaMethod();
or:
String? str = javaObject.javaMethod();
In the first case, we insert a runtime type check that throws an `AssertionError` if `javaMethod()` returns `null`. In the second case we don't.
That is to say, the Ceylon compiler recognizes that it's dealing with a Java library where information about null is simply missing from the method signature and adjusts accordingly.
- quarterto 12y agoThe first case would be a compile time error in Kotlin. How is a runtime AssertionError better than a runtime NullPointerException?
- newgame 12y ago> The first case would be a compile time error in Kotlin FYI, Kotlin will have the same behavior as Ceylon in the future, i.e. it's going to be a runtime error in the first case: http://blog.jetbrains.com/kotlin/2014/10/making-platform-interop-even-smoother/ http://blog.jetbrains.com/kotlin/2014/10/making-platform-int...
- gavinking 12y agoWell it is somewhat better because it occurs immediately when the null value passes from Java code with unsafe null into Ceylon code with safe nulls. Having the compiler produce an actual error in this case seems wrong and excessive, since the compiler does _not_ know better than you whether javaMethod() can return null. It simply doesn't have that information when calling Java code.