ďťż
 
Genrics WRRR Wildcards ďťż
 
Genrics WRRR Wildcards
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Genrics WRRR Wildcards



xdm - 13-06-2006 01:12
Genrics WRRR Wildcards
  Czy ktos wie gdzie jest sensownie objasnione korzystanie / tworzenie
typow generycznych. Bo te opracowania ktore czytalem sa
niesatyfakcjonujace. Wielu rzeczy nie rozumiem. Jestem zly na Generics
bo ni jak nie umiem sobie wbic do glowy sposobu w jaki one dzialaja.

Type Erasure ok w sumie nawet fajnie brzmi i raczej to jest proste,
proste dopoty dopoki nie korzystamy z o tego o tutaj : ?????

A teraz pare rzeczy ktorych nie kumam :

public class GenT7{

public static List<? super Number>test(){
return null;
}

public static <E extends Number> List<? extends E> process(List<E> nums){
return null;
}
public static void main(String[] args) {

List<Number> input = null;
List<? super Integer> output=null;
List<? super Integer> a = null;
a=output;

Object b =a.get(0);
output=test();
output=process(input);

//Nie kapuje tego dlaczego output=process(input) nie przchodzi
// przez kompilator ( tzn wyrzuca bład)
// Zas test przechodzi przeciez obie funkcje zwracaja dokladnie
// ten sam typ

}

}

Dobra powiecie pewnie ze powinienem był napisać w funkcji zamiast
List<? extends E>
List<? super E>
dobra zgadzam sie powinienem byl tak napisac tylko co mi to da
Czyli ze deklarujemy funkcje tak :

public static <E extends Number> List<? super E> process(List<E> nums)

Kiedy wtedy moge zwracac jedynie obiekty typu List<? super Integer> i
List<? super Number>

a na liscie wywolac jedynie metodę np

Object obj;
obj=a.get(0);

albo

List<? super Integer> lista=null;
lista=process(input);
Nie moge zwrocic zadnego typu oprocz tego czegoś : " <capture-of ?
super Number>"

Wydawalo mi sie ze nie ma problemu zeby zrobic cos takiego

List<Number> lista=null;
lista = process(input);

Ale to jest dla kompilatora ogromny problem

List<Integer> wej ;
List<Integer> wyj ;

wyj=process(wej);

To dla kompilatora tez stanowi taki sam problem

Do takich tekstow sklonilo mnie pytanie 16. Z z ksiazki K.Sierra
B.Bates przygotowujacej do SCJP

cytuje
------------------------------------------CYTAT-------------------------------------------------------
Given a method declared as:
public static <E extends Number> List<? super E> process(List<E> nums)
A programmer wants to use this method like this:
// INSERT DECLARATIONS HERE
output = process(input);
Which pairs of declarations could be placed at // INSERT DECLARATIONS
HERE to allow
the code to compile? (Choose all that apply.)
A. ArrayList<Integer> input = null;
ArrayList<Integer> output = null;
B. ArrayList<Integer> input = null;
List<Integer> output = null;
C. ArrayList<Integer> input = null;
List<Number> output = null;
D. List<Number> input = null;
ArrayList<Integer> output = null;
E. List<Number> input = null;
List<Number> output = null;
F. List<Integer> input = null;
List<Integer> output = null;
G. None of the above.
Answer:
3 B, E, and F are correct.
The return type of process is definitely declared as a List, not an
ArrayList, so A and D
are wrong. C is wrong because the return type evaluates to
List<Integer>, and that can't
be assigned to a variable of type List<Number>. Of course all these
would probably cause a
NullPointerException since the variables are still null---but the question
only asked us
to get the code to compile.
-----------------------------------koniecCYTATU-------------------------------------------------------

Gdzie wlasnie odpowiedzi B,E,F podaje sie za dobre ( kompilator mowi ze
sa zle).
W takim razie pytam skoro wyszlo na to ze moge zwrocic jedynie
capture of ? super E i to dokladnie to po co mi w ogole jakies '?'.
Wolalbym w takim razie korzystac z samych "bounded generics" po co te
Wildcards kiedy to wprowadza tyle zamieszania. Nie przeczytalem jeszcze
zadnego dokumentu ktory by precyzyjnie wyjasnial istote Wildcards.
Najwartosciowszym prawdopodobnie jest :

http://www.angelikalanger.com/Generi...nericsFAQ.html

Ale przesady czytac 450 stron zeby zrozumiec co daje jeden znaczek ? .
Musi byc jakis bardziej odpowiedni sposob.

Rozczarowany Genericsami ....
xdm

PS:Dzieki z gory kazdemu kto postara mi sie naswietlic w jakichs paru
punktach sens istnienia Wildcards.





=?ISO-8859-2?Q?Pawe=B3_W=F3jciak?= - 13-06-2006 01:13

  xdm napisał(a):
> Czy ktos wie gdzie jest sensownie objasnione korzystanie / tworzenie
> typow generycznych. Bo te opracowania ktore czytalem sa
> niesatyfakcjonujace. Wielu rzeczy nie rozumiem. Jestem zly na Generics
> bo ni jak nie umiem sobie wbic do glowy sposobu w jaki one dzialaja.
>
<snip>

http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

tutaj masz wszystko ładnie opisane, na jedynych 23 stronach ;)

Pozdrawiam,
Pablo




a1 - 13-06-2006 01:13

  xdm wrote:

<ciah>

>
> List<? super Integer> lista=null;
> lista=process(input);
> Nie moge zwrocic zadnego typu oprocz tego czegoś : " <capture-of ?
> super Number>"

process zwraca ci w tym wypadku List<? extends Number>, i chcesz to
przypisac do List<? super Integer>, zauwaz ze List<? extends Number> ma
wildcard duzo szerszy niz List<? super Integer> wiec sa to rozne typy i
nie ma mozliowsci ich przypisacnia.

--
a1 (Bartek Janusz) arcone1 gmail com




xdm - 13-06-2006 01:13

  a1 napisał(a):
> xdm wrote:
>
> <ciah>
>
>>
>> List<? super Integer> lista=null;
>> lista=process(input);
>> Nie moge zwrocic zadnego typu oprocz tego czegoś : " <capture-of ?
>> super Number>"
>
> process zwraca ci w tym wypadku List<? extends Number>, i chcesz to
> przypisac do List<? super Integer>, zauwaz ze List<? extends Number> ma
> wildcard duzo szerszy niz List<? super Integer> wiec sa to rozne typy i
> nie ma mozliowsci ich przypisacnia.
>

W srodkowej czesci posta bys zauwazyl ze w miedzyczasie sie wycofalem z
extends :) ale juz nie chcialo mi sie wymazywac.
i deklaracja ktora odnosi sie do tego pytania brzmi:
public static <E extends Number> List<? super E> process(List<E> nums)

A jeszcze ciekawsze jest pytanie ktore cytuje i w ktorym sie podaje
bledne odpowiedzi za prawdziwe.





a1 - 13-06-2006 01:13

  xdm wrote:

>> process zwraca ci w tym wypadku List<? extends Number>, i chcesz to
>> przypisac do List<? super Integer>, zauwaz ze List<? extends Number>
>> ma wildcard duzo szerszy niz List<? super Integer> wiec sa to rozne
>> typy i nie ma mozliowsci ich przypisacnia.

faktycznie troche chaotycznie piszesz, w kazdym razie:

<code>
public <E extends Number> List<? super E> process(List<E> nums){
return null;
}

public void testProcess() {
List<Number> input = null;
List<? super Integer> output=null;

List<Integer> in;
List<Integer> out;

// to jest oczywiscie prawidlowe, i nie wiem czym to kompilujesz
// ze ci sie wywala
// List<? super Number> moze byc przypisane do
// List<? super Integer>
output=process(input);

// to jest nieprawidlowe bo process zwraca typ wildcardowany
// (List<? super Integer> a probujesz go przyisac do typu
// dobrze okreslonego (List<Integer>
out=process(in)
}
</code>

--
a1 (Bartek Janusz) arcone1 gmail com
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [PostgreSQL] =?ISO-8859-2?Q?Du=BFa?= baza danych [Oracle] Sesja uzytkownika [mysql] roznica czasu [mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?= skladanie zdjecia ze zdjec procedura tworzaca tabele - oracle [pl/sql] =?ISO-8859-2?Q?po=B3=B1czy=E6_kilka_rekord=F3w?= [MySQL] Zapisanie relacji MacroBase szukam projektanta strony www
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sulimczyk.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com