Is case var(var x, var y) a valid syntax ?
Brian Goetz
brian.goetz at oracle.com
Sun Sep 13 18:30:45 UTC 2020
>
>
> So I’m not sure how much we can learn from this particular
> example. Maybe you have a better one?
>
>
> No a better one, just another one, you want to be able to declare a
> deconstructor abstract by example on an interface
> interface Map {
> interface Entry<K,V> {
> public abstract deconstructor Entry(K key, V value);
> }
> }
Yes, valid goal, but now you're getting ahead of the story. There is a
plan for the "instance method analogue" of pattern declarations, but
it's not called a "deconstructor", any more than a method is not called
a constructor.
The basic story is:
- patterns are declared as members
- some patterns are static (Optional.of(var x)), some are instance
(Map.contains(k, var value)), and some are the same weird mix that
constructors are (deconstructors)
- Deconstructors are total (they deconstruct only), but the others are
partial (they ask a question)
Right now, we're looking only at the simplest kind of declared pattern
-- deconstructors -- and building from there.
> ...
> for(Map.Entry<String, String>(var key, var value) : entries) {
> ...
> }
>
> BTW, it's also an example where 'var' can be useful instead of having
> to specify the full type
> for(var(var key, var value) : entries) {
> ...
> }
>
>
> I get that you can write the code like this if baseSalary is declared
> private in Employee
>
> class VP extends Employee {
> int bonus;
>
> deconstructor VP(int salary) {
> super(var baseSalary) = this;
> return (baseSalary + bonus);
> }
> }
>
> still, a deconstructor is unlike a constructor because you can call a
> constructor directly something you can not do with a deconstructor.
You cannot call a constructor directly either! You execute a "new"
operation, which has multiple consequences, only one of which is calling
the constructor to fill in the state of the object. The same is true
with deconstructors -- you do a pattern match, which, under the right
circustances, causes the deconstructor to be called.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20200913/2956efcc/attachment-0001.htm>
More information about the amber-spec-experts
mailing list