2012-07-07 23 views
16

Mi chiedo perché generico metodi che nulla void sono (o può essere) ha dichiarato questo modo tornano:ritorno Tipo di Java metodi generici

public static <E> void printArray(E[] inputArray) { 
    // Display array elements    
    for (E element : inputArray){   
     System.out.printf("%s ", element); 
    } 
    System.out.println(); 
    } 

Sembra <E> è il tipo di oggetto restituito, ma il metodo non restituisce nulla in effetti. Quindi qual è il vero significato di <E> in questo caso in particolare e in generale in generale?

risposta

66

Questa domanda si adatta uno dei miei vecchi appunti. Spero che questo aiuta illustrazione:

enter image description here enter image description here

+7

avete fatto un buon lavoro reale qui, +1 – CloudyMarble

+0

felice di sentire che! Grazie. @twomore – Jops

+1

great answer + 1, potrebbe valere la pena ricordare che nel tuo primo metodo puoi usare Void (maiuscolo 'V') per il tipo di ritorno T ... anche se 'y' dovrebbe avere un valore nullo – Rhubarb

3

Non è il tipo dell'oggetto restituito. Indica che E, nella firma del metodo, è un tipo generico e non un tipo concreto. Senza di esso, il compilatore cercherebbe una classe denominata E per l'argomento del metodo.

7

Il <E> è la dichiarazione generica del parametro di tipo. Significa "questo metodo ha un singolo parametro di tipo, chiamato E, che può essere di qualsiasi tipo".

Non è il tipo di ritorno, ovvero dopo la dichiarazione del parametro di tipo, subito prima del nome del metodo. Quindi il tipo di ritorno del metodo printArray nella tua domanda è ancora void.

Vedere section 8.4 of the JLS per ulteriori dettagli sulle dichiarazioni dei metodi.

2

Il < E> è chiamato un parametro di tipo formale. Non è il tipo di ritorno del metodo. In pratica dice che il metodo può accettare come array di parametri di tipi diversi (E [] inputArray).

1

E viene utilizzato come segnaposto per il tipo effettivo che verrà passato alla funzione Gen quando questa funzione chiamerà.

supporre E può essere sostituito da intero