Sealed local interfaces

Remi Forax forax at univ-mlv.fr
Wed Aug 19 08:43:35 UTC 2020


> De: "Brian Goetz" <brian.goetz at oracle.com>
> À: "Vicente Romero" <vicente.romero at oracle.com>, "amber-spec-experts"
> <amber-spec-experts at openjdk.java.net>
> Envoyé: Mercredi 19 Août 2020 01:19:54
> Objet: Re: Sealed local interfaces

> In theory, there is benefit to having local sealed interfaces, in that they
> would provide a source of exhaustiveness information for switches inside the
> method. On the other hand, we don't really want to encourage methods to be
> enormous. So at least for now, this fix seems fine.
I agree, 
in my defense, i've written that code in a unit test method :) 

Rémi 

> On 8/18/2020 7:15 PM, Vicente Romero wrote:

>> Hi Remi,

>> On 8/17/20 10:07 AM, Remi Forax wrote:

>>> I've found a discrepancies in the current spec of sealed,
>>> the current spec allows local sealed interface but you have no way to provide a
>>> sub-types apart a sealed sub interfaces.

>>> A record or an interface is allowed to be declared inside a method,
>>> by example, this is a valid code
>>> static void foo() {
>>> interface I {}

>>> record Foo() implements I {}
>>> }

>>> the interface can also be sealed
>>> static void foo() {
>>> sealed interface I {}

>>> record Foo implements I {}
>>> }

>>> but this code does not compile because Foo is a local class and a local class
>>> can not implement a sealed interface.

>>> This rule was intended to not allow this kind of code
>>> sealed interface I {}
>>> static void foo() {
>>> record Foo implements I {}
>>> }
>>> because the interface I is visible while Foo is not.

>>> But we have forgotten to discuss about the case where both Foo and I are in the
>>> same scope.

>>> I see two possible fixes
>>> - disallow sealed local interfaces

>> +1 having a local sealed class seems like unnecessary, this option makes more
>> sense to me

>>> - allow local class/record to implement a sealed interface if they are in the
>>> same scope.

>>> Rémi

>> Vicente
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20200819/4b3768b7/attachment.htm>


More information about the amber-spec-experts mailing list