/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Statisk metode generics og statiske import~
Fra : Soren AD


Dato : 12-01-10 15:46

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 (13-01-2010)
Kommentar
Fra : Arne Vajhøj


Dato : 13-01-10 04:23

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 (13-01-2010)
Kommentar
Fra : Soren AD


Dato : 13-01-10 10:21

Arne Vajhøj <arne@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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste