Right, but what about:

final x = "Hello, World!"?

There's no type there, but the type of "Hello, World!" isn't visible
in this, either, and this is legal today:

int length = "Hello, World!".length()

On Sep 23, 2:15 am, JodaStephen <scolebou...@joda.org> wrote:
> As one of multiple independent inventors of the diamond operator, I
> can give some insight.
>
> Fundamentally, changes in Java are about working out what is deemed to
> be an acceptable change for Java developers, and what is acceptably in
> the "Java style". Both of these are subjective.
>
> In the initial discussion I had with a key person, the argument was
> that in Java the LHS of the declaration matters. Specifically that
> these two lines are not the same:
>  List<String> list = new ArrayList<>();
>  var list = new ArrayList<String>();
> because the latter declares a variable of the concrete type rather
> than the interface. The discussion ranged from the practical
> implications of that (relatively little) to the conceptual
> implications (Java devs like interfaces, and would see this as
> negative). In addition, the lack of a LHS type was discussed as not
> being "Java style".
>
> ALL of these things are to a subjective, and everyone reading this
> will ave their own opinion. (eg. I personally would be happy with
> var). Its just that the conclusion of the debate that day was an
> opinion that "Java style" would probably require LHS types, and thus
> the diamond operator.
>
> So, yes. The whole decision on diamond vs var was subjective
> judgements. But a number of key people came independently to the same
> conclusion. So, let no-one say it wasn't thought about.
>
> Stephen
>
> On Sep 22, 3:52 pm, Reinier Zwitserloot <reini...@gmail.com> wrote:
>
>
>
> > Because they aren't the same.
>
> > Here you go:
>
> > legal:
>
> > List<Employee> emps = new ArrayList<>();
> > emps = new LinkedList<>();
>
> > will fail, because LInkedList is not an ArrayList:
>
> > var emps = new ArrayList<Employee>();
> > emps = new LinkedList<Employee>();
>
> > This, and the problem of introducing a new keyword, were major reasons
> > for NOT going the var route. Furthermore, what diamond does already
> > exists in java so its only a very minor update: unlike constructors,
> > static methods _do_ infer, it's like they have implicit diamond
> > operators:
>
> > this is legal today if you use guava:
>
> > List<Employee> emps = Lists.newArrayList();
>
> > Now you know the thinking of the powers that be on the coin mailing
> > list. There's a nuance I've been arguing for on coin-dev back during
> > the time proposals were considered, which was two-fold:
>
> > 1. There's no need for even diamond; just get rid of the idea of raw
> > for -source 1.7, and let that become 'infer it please'. It might even
> > be possible to remain backwards compatible.
>
> > 2. While 'var' has all sorts of issues, both practical (new keyword is
> > a problem, and not being able to assign a LinkedList to an ArrayList
> > var is confusing), and ideological ("List" and "ArrayList" in List x =
> > new ArrayList() convey different meanings; they should not be mixed
> > up), these issues go away when we look at only FINAL variables.
> > There's no problem with confusion about assigning a LinkedList to
> > something initialized as an ArrayList. The ideological argument loses
> > a lot of its momentum when you realize that any kind of chaining on
> > expressions does not even allow you to list a more general type.
> > "final" itself can serve as the keyword, solving the last problem.
> > Thus, while this:
>
> > var list = new ArrayList<String>();
>
> > wouldn't be legal, this should have been:
>
> > final list = new ArrayList<String>();
>
> > unfortunately this idea was not accepted.
>
> > On Sep 22, 5:21 pm, Serge Boulay <serge.bou...@gmail.com> wrote:
>
> > > Is there some particular reason Oracle choose the diamond operator over
> > > something like “var” ?
>
> > > For example, I find this
>
> > > List<Employee> emps = new ArrayList<>();
>
> > > far less intuitive than say
>
> > > var emps = new ArrayList<Employee>();
>
> > > The second example has the added benefit that it would work with all 
> > > types.

-- 
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javapo...@googlegroups.com.
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to