Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Statisk metode generics og statiske imports

4 views
Skip to first unread message

Soren AD

unread,
Jan 12, 2010, 9:45:58 AM1/12/10
to
Hejsan NG,

Jeg har lidt problemer med type-inferens ved statiske metoder som bruger
generics. Se eksemplet herunder. Det jeg gerne vil er selvf. det som
ikke virker :-) :-(

Jeg ville gerne have det virker, da det er til noget builder hvor der
bruges statiske imports - hele ideen er at det er noget lettere at
skrive kun metode(..) end Blabla.<Type>metode(..)

Findes der nogen workarounds for at få type-inferensen til at virke over
flere "led" ?

---
package prototype;

public class TypeInfTest {

public static class Container<V, E> {
}

public interface Generator<V, E> {
public void apply(Container<V, E> container);
}

public static class MyGenerator<V, E> implements Generator<V, E> {
@Override
public void apply(Container<V, E> veContainer) {
// whatever
}
}

public static <V, E> Generator<V, E> generator() {
return new MyGenerator<V, E>();
}

public static <V, E> Container<V, E> execute(Generator<V, E> generator) {
Container<V, E> c = new Container<V, E>();
generator.apply(c);
return c;
}

public static void main(String[] args) {
// virker
Container<String, String> c0 = execute(null);

// virker
Container<String, String> c1 = execute(TypeInfTest.<String, String>generator());

// virker
Container c2 = execute(generator());

// virker IKKE
Container<String, String> c3 = execute(generator());
}

}
---

Mvh,
Søren

Arne Vajhøj

unread,
Jan 12, 2010, 10:23:13 PM1/12/10
to
On 12-01-2010 09:45, Soren AD wrote:
> Jeg har lidt problemer med type-inferens ved statiske metoder som bruger
> generics. Se eksemplet herunder. Det jeg gerne vil er selvf. det som
> ikke virker :-) :-(
>
> Jeg ville gerne have det virker, da det er til noget builder hvor der
> bruges statiske imports - hele ideen er at det er noget lettere at
> skrive kun metode(..) end Blabla.<Type>metode(..)
>
> Findes der nogen workarounds for at få type-inferensen til at virke over
> flere "led" ?

> public static<V, E> Generator<V, E> generator() {


> return new MyGenerator<V, E>();
> }
>
> public static<V, E> Container<V, E> execute(Generator<V, E> generator) {
> Container<V, E> c = new Container<V, E>();
> generator.apply(c);
> return c;
> }
>
> public static void main(String[] args) {
> // virker
> Container<String, String> c0 = execute(null);
>
> // virker
> Container<String, String> c1 = execute(TypeInfTest.<String, String>generator());
>
> // virker
> Container c2 = execute(generator());
>
> // virker IKKE
> Container<String, String> c3 = execute(generator());
> }

Så vidt jeg ved laver Java kun type inferens ved assignment - ikke
ved argumenter til kald.

Altså: bad luck.

Arne

Soren AD

unread,
Jan 13, 2010, 4:20:33 AM1/13/10
to
Arne Vajhøj <ar...@vajhoej.dk> writes:

> On 12-01-2010 09:45, Soren AD wrote:
>> Jeg har lidt problemer med type-inferens ved statiske metoder som bruger
>> generics. Se eksemplet herunder. Det jeg gerne vil er selvf. det som
>

> Så vidt jeg ved laver Java kun type inferens ved assignment - ikke
> ved argumenter til kald.

Ah ok, det var lige den information jeg ikke kunne finde, tak!

> Altså: bad luck.

(Men, med den nye viden kan jeg internt i API gøre lidt antagelser så
det udadtil virker fornuftigt :)

Mvh,
Søren

0 new messages