2015-06-11 21 views
6

Non riesco a capire completamente la seguente affermazione.Confuso circa il seguente codice "generici"

<T> T[] toArray(T[] a);

Anche se, capisco che la dichiarazione di cui sopra è la dichiarazione di una funzione che dovrebbe essere in grado di accettare e restituire un array di oggetti di tipo T ... Non capisco il motivo per cui

1 - I due T s' non sono circondati con <>

2 - sembra che ci siano 2 tipi restituiti, come in <T> & T[]

risposta

6

<T> non è un tipo di reso. È una dichiarazione del parametro di tipo generico utilizzato dal metodo. Una volta dichiarato, può essere utilizzato nella firma del metodo senza lo <>;

+2

ed è circondata con '<>' perché è così che il suo formato è stato definito. – biziclop

+0

Quindi potrei scrivere la stessa dichiarazione senza il primo '' e quindi semplicemente circondando gli altri 2 'T' con' <> '? Così, per esempio, posso dichiarare quanto sopra con ' [] toArray ( [] a);' invece? – Grateful

+0

@Grateful No, non sarebbe corretta sintassi Java. Se quel metodo faceva parte di una classe che dichiarava il parametro generico T ('public class SomeClass '), si poteva omettere il '' dalla dichiarazione del metodo, ma gli altri due T rimanevano gli stessi. – Eran

0

Il tipo di reso è T[] e non <T>. Ciò che indica è che il metodo è di tipo generico e le implementazioni dovrebbero occuparsi del tipo di conseguenza.

I due T non circondati da <> sono il tipo di parametro di input e il tipo di ritorno. In questo caso entrambi dovrebbero essere uguali.

1
  1. dichiara che il metodo è parametrizzato da T, al contrario della classe contenente, ad esempio. Le staffe angolari sono parte della sintassi, non il nome della variabile

  2. punto 1, non è un tipo di ritorno

Problemi correlati