Don't we have a similar problem with non-accessible supertypes and
inference? If I have:
private abstract class A { }
public class B extends A { }
public class C extends A { }
Won't I infer LUB(B,C) = A, rather than Object?
On 2/25/2020 6:08 AM, Maurizio Cimadamore wrote:
But if that's the case, I have to admit that I find it a bit awkward
that I can use javac to probe sealed interfaces to see which might
share a common implementation class, even if that implementation class
is out of my reach and hidden behind module boundaries. In other
words, while with the rules we have now, the user can always "see" why
a cast has succeeded or fail, with these new rules, sometimes a cast
can (statically) be rejected or not depending on details which might
be unavailable to the site where the cast operation occurs. I wonder -
should javac "stop" looking, and avoid descending into subtypes which
are not visible from the use site (e.g. consider A and B as completely
disjoint in the example above, if the cast occurs outside M?)