PROPOSAL: 'final' without explicit type (original) (raw)

Marek Kozieł develop4lasu at gmail.com
Sun Mar 29 14:22:40 PDT 2009


2009/3/29 Florian Weimer <fw at deneb.enyo.de>:

* Reinier Zwitserloot:

final list = foo ? new LinkedList() : new ArrayList();

the type of 'list' is what, exactly? It's the type specified in section 15.25 of the JLS.  I can't find a definition of lub(T1, T2) in the spec, but "lub" probably stands for "least upper bound", and lub(LinkedList, ArrayList) would be AbstractList & Serializable & Cloneable (if I got the types right). Serializable? Cloneable? List?  They're all valid, so that wouldn't work. Intersection types are already part of the language, so I don't see any problem.  The following compiles:  interface I1 {}  interface I2 {}  static class C1 implements I1, I2 {}  static class C2 implements I1, I2 {}  static <T extends I1 & I2> void foo1(T foo) {  }  static void foo1(boolean foo) {  foo1(foo ? new C1() : new C2());  } Existence of intersection types also leaks to the surface during overload resolution. It's just that you can't write down the type of some expressions using Java type notation.  For local variables, this isn't a problem; only debugging information needs to be updated slightly.  The effect for fields would be more pronounced, and I guess to stay within COIN's scope, a proposal would have to exclude inference for fields.

You got it wrong. Java do not support intersection types, or we use different definition.

T extends I1 & I2 : not intersection I1 & I2: intersection

interface I1 {}

interface I2 {}

<T extends I1&I2,K extends I1&I2> void noInterection(T t,K k){
    if (boo)t=k; // Type mismatch: cannot convert from K to T
    ...
}

void intersection( I1&I2 t,  I1&I2 k){
    if (boo)t=k; // OK
    I1 i1 = t; // OK
    I2 i2 = t; // OK
}

http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#108433

"is not possible to write an intersection type directly as part of a program; no syntax supports this."

-- Pozdrowionka. / Regards. Lasu aka Marek Kozieł

http://lasu2string.blogspot.com/



More information about the coin-dev mailing list