2014-09-12 4 views
2

Я новичок в ява дженериков мой вопрос:Java Дженерики: Синтаксис Объяснение

public static <E> void printArray(E[] inputArray) 

В приведенном выше заявлении, когда тип возвращаемого функцией является ничтожным, то почему мы использовали E перед тем void? Почему этот синтаксис действителен?

В соответствии с теорией метод может сам быть возвратным типом?

Then suppose E = method_abc then how compiler will manage 

public static method_abc void printArray (E[] Array) 

Моя ссылка программа была

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

    public static void main(String args[]) 
    { 
     // Create arrays of Integer, Double and Character 
     Integer[] intArray = { 1, 2, 3, 4, 5 }; 
     Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; 
     Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; 

     System.out.println("Array integerArray contains:"); 
     printArray(intArray ); // pass an Integer array 

     System.out.println("\nArray doubleArray contains:"); 
     printArray(doubleArray); // pass a Double array 

     System.out.println("\nArray characterArray contains:"); 
     printArray(charArray); // pass a Character array 
    } 
} 

ответ

2

<E> здесь не имеет ничего общего с типом возврата; это означает, что это общая функция, которая может принимать различные типы массивов. Чтобы легче понять, код может быть что-то вроде этого:

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

    public static void main(String args[]) 
    { 
     // Create arrays of Integer, Double and Character 
     Integer[] intArray = { 1, 2, 3, 4, 5 }; 
     Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; 
     Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; 

     System.out.println("Array integerArray contains:"); 
     GenericMethodTest.<Integer>printArray(intArray ); // pass an Integer array 

     System.out.println("\nArray doubleArray contains:"); 
     GenericMethodTest.<Double>printArray(doubleArray); // pass a Double array 

     System.out.println("\nArray characterArray contains:"); 
     GenericMethodTest.<Character>printArray(charArray); // pass a Character array 
    } 
} 

Так что <E> делает это говорит функцию «Существует общий тип E и вы принимаете массивы E, так что если, например, я позвоните вам с общим типом Integer, вы принимаете Integer[]. "

Это не изменение типа возврата, хотя. Точно так же, как public static не меняет тип возврата.

+0

[Blalasaadri] Sir Спасибо :) –

1

В public static <E> void printArray(E[] inputArray), E просто используется для обозначения Generic параметра. Возвращаемым типом метода остается void.

+0

[Rrevo] Sir Than you :) –

1

По <E> можно определить общий тип переменной, если вы будете писать

public static void printArray(E[] inputArray) 

Java попытается найти класс с именем E, потому что вы не определяете E как родовое. Возвращаемое значение в обоих случаях равно null, эта общая часть определения не является частью возвращаемого значения, это отдельный блок сигнатуры функции.

+0

[Dmitry Spikhalskiy] Спасибо, сэр :) –

Смежные вопросы