Hi David, > De: "Brian Goetz" <brian.go...@oracle.com> > À: "amber-spec-experts" <amber-spec-experts@openjdk.java.net> > Envoyé: Jeudi 1 Octobre 2020 22:33:28 > Objet: Fwd: Records feedback
> Received on the -comments list. A Record does not support encapsulation (separating the public API and the private implementation) given that it's a named tuple. If you want encapsulation, use a class. public class Nil<A> implements List<A> { private static final Nil<?> INSTANCE = new Nil<Object>(); private Nil() {} @SuppressWarnings("unchecked") public <A> Nil<A> nil() { return (Nil<A>) INSTANCE; } } As a side note, i've also fixed your use of @SuppressWarnings("rawtypes") which should be used mostly when dealing with code written before Java 5. Here, you should use @SuppressWarnings("unchecked") to workaround the fact that there is no type Nothing in Java and no way to express that Nil is covariant at declaration site. regards, Rémi > -------- Forwarded Message -------- > Subject: Records feedback > Date: Thu, 1 Oct 2020 15:09:38 -0500 > From: David Aaron Kaye [ mailto:kayed...@gmail.com | > <kayed...@gmail.com> ] > To: [ mailto:java-se-spec-comme...@openjdk.java.net | > java-se-spec-comme...@openjdk.java.net ] > Good afternoon, > I am very excited to see Records coming to Java. I have been playing around > with them since JDK 14. I noticed that in the proposal, JDK-8246771 > [ https://bugs.openjdk.java.net/browse/JDK-8246771 | > <https://bugs.openjdk.java.net/browse/JDK-8246771> ] , it says > ...if the canonical constructor is explicitly declared then its access > modifier must provide at least as much access as the record class > I have implemented a functional List: > public sealed interface List<A> permits Cons, Nil { > } > public record Cons<A>(A head, List<A> tail) implements List<A> { > } > @SuppressWarnings("rawtypes") > public record Nil<Nothing>() implements List<Nothing> { > public static final Nil instance = new Nil(); > private Nil() { > } > } > I made the constructor private because I want this to be a singleton, > accessed from instance, but the current proposal does not allow me to do > that, and I get a compilation error on the private constructor. I could > prefer to be able to make the constructor private so that I can have a > record that is a singleton. > Thanks, > David Kaye