当前位置: 首页 > 面试题库 >

Java泛型:语法说明

虞华彩
2023-03-14
问题内容

我是java泛型的新手,我的问题是:

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

在上面的语句中,当函数的返回类型为void时,为什么我们以前使用Evoid?为什么此语法有效?

根据理论,方法本身可以是返回类型吗?

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
    } 
}

问题答案:

<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不更改返回类型一样。



 类似资料:
  • 问题内容: 这可以返回一个整数列表: 但是,如果我想让调用者指定通用类型怎么办?像这样的东西,尽管在语法上我不确定如何去做: 用法是: 问题答案: 关于参数化类型的通用工厂方法 看来您想编写方便的工厂方法来实例化通用集合。 您可以编写如下通用方法: 然后,您可以简单地编写: 请注意,在某些情况下,上述方法不必须的,你可以选择离开了实施的名字出来的方法和只使用名称(例如,)。 有效Java 2nd

  • 问题内容: 嗨,我在Grid视图中的android文档中遇到了以下代码。 在此 < ?>(作为stackoverflow添加的空间不允许没有空间)指示/做什么? 问题答案: <?>是通用类型的通配符,这意味着AdapterView的通用类型可以是任何东西。 更具体地说,在这种情况下,方法上的参数可能会接收带有绝对任何泛型类型的AdapterView。请注意,如果您想限制泛型类型,可以执行以下操作:

  • 问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符

  • 如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个

  • 问题内容: 我有一个代表文本片段的泛型类。该文本片段可能具有多种不同模式(突出显示的不同类型)中的任何一种。这些模式用枚举表示。每个项目的Enum可能不同,但是它必须实现一个接口,该接口提供了一种将其中两个结合的方法(可以突出显示并加粗显示)。所以我有一个界面: 然后我的TextFragment是文本字符串和模式的容器。但是当我尝试声明该类时: 我收到以下错误: 令牌“扩展”的语法错误,预期 根据

  • 问题内容: 以下这部分代码是什么意思?我什至不知道这个语法叫什么。 这是原始代码(可从此处找到:http : //developer.android.com/guide/components/processes-and- threads.html ): 问题答案: 告诉AsyncTask使用3种不同的类型进行描述,当您使用AsyncTask时,将String作为第一个参数,将Void作为第二个参数