Utilizzo dei tipi non elaborati nelle firme dei metodi Java

5

In generale cerco di evitare l'uso di tipi non elaborati nella firma dei metodi nelle librerie che sviluppo. Tuttavia, ultimamente sto iniziando a rilassare questa regola (auto-adottata), e sto iniziando a scrivere i tipi grezzi più spesso di prima.

Ad esempio, supponendo un metodo che riceve qualsiasi elenco come parametro (ad esempio, il tipo di membri della lista non è importante), sono stato tentato prima di dichiararlo come:

void myMethod(List<?> list) {...}

Ma ora sto iniziando a scrivere sempre di più:

void myMethod(List list) {...}

Perché è più breve.

La mia domanda concreta è: Nello scenario in cui i parametri di tipo non sono importanti, si utilizzano i tipi non elaborati nei parametri del metodo considerati una buona pratica? In caso contrario, perché no?

L'unico problema che vedo è essere condannato a vedere un avvertimento eterno nell'IDE che utilizzo (anche se probabilmente può essere disattivato da qualche parte), ma vorrei essere sicuro di non mancare qualcos'altro.

Aggiornamento:

Sono pienamente convinto che dovrei usare i generici ovunque dopo aver letto il paragrafo seguente qui :

Use of raw types is discouraged. The Java Language Specification even states that it is possible that future versions of the Java programming language will disallow the use of raw types.

    
posta Sergio 03.12.2013 - 22:47
fonte

1 risposta

16

Sì, lo sei. I caratteri jolly generici affermano che il contenitore contiene "qualcosa, ma non siamo sicuri di cosa" e i tipi non elaborati sono solo "il contenitore contiene oggetti".

Quindi puoi ottenere risultati poco intuitivi,

List<?> wild = new ArrayList<String>();
List    raw  = new ArrayList<String>();
wild.add(1); // Compile time error
raw.add(1);
raw.add("Foo");
wild.add("string"); // Still a compile time error

Le carte jolly sono rappresentate come raw in fase di esecuzione, ma sono tipografate per assicurarti di non fare mai qualcosa di sciocco, come aggiungere oggetti casuali ad esso.

Quindi se non ti interessa la sicurezza del tipo, allora sì, puoi andare avanti e usare List , ma per 3 caratteri, utilizzerei solo il tipo parametrizzato.

    
risposta data 04.12.2013 - 00:25
fonte

Leggi altre domande sui tag