Java泛型

泛型还提供编译时类型安全,它允许程序员在编译时捕获无效的类型。

使用Java泛型的概念,我们可以编写一个通用的方法进行排序对象的数组,然后用整型数组,数组双,字符串数组等调用泛型方法,对数组元素进行排序。

泛型方法:

可以调用不同类型的参数一个通用的方法声明。基于传递给泛型方法的参数的类型,编译器适当地处理每个方法调用。以下是定义泛型方法的规则:

  • 所有泛型方法的声明有一个类型参数部分由尖括号分隔(<and>)之前的方法的返回类型(<E>下一个例子)。

  • 每个类型参数部分包含用逗号分隔的一个或多个类型参数。 一个类型参数,也称为类型变量,是一个标识符,用于指定一个泛型类型的名称。

  • 类型参数可以用来声明的返回类型和充当占位符传递给泛型方法,它被称为实际类型参数的参数的类型。

  • 泛型方法的身体就像是任何其他方法的声明。需要注意的是类型参数只能表示引用类型,而不是原始类型(如int,double和char)。

例子:

下面的例子演示了如何我们可以使用一个通用的方法,打印不同类型的数组:

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( "
Array doubleArray contains:" );
        printArray( doubleArray ); // pass a Double array

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

这将产生以下结果:

Array integerArray contains:
1 2 3 4 5 6

Array doubleArray contains:
1.1 2.2 3.3 4.4 

Array characterArray contains:
H E L L O

限制类型参数:

有可能有时候,会希望限制该种被允许被传递到一个类型参数的类型。例如,运行在数字的方法可能只希望接受数或其子类的实例。这就是界定类型参数。

声明一个界定类型参数,列出类型参数的名称,后面是extends关键字,其次是它的上限。

例子:

下面的例子演示了如何扩展是用在一般意义上是指无论是“扩展”(如类)或“工具”(如接口)。这个例子是通用方法返回最大的三个比较对象:

public class MaximumTest { // determines the largest of three Comparable objects public static < T extends Comparable < T >> T maximum ( T x , T y , T z ) { T max = x ; // assume x is initially the largest if ( y . compareTo ( max ) > 0 ){ max = y ; // y is the largest so far } if ( z . compareTo ( max ) > 0 ){ max = z ; // z is the largest now } return max ; // returns the largest object } public static void main ( String args [] ) { System . out . printf ( "Max of %d, %d and %d is %d" , 3 , 4 , 5 , maximum ( 3 , 4 , 5 ) ); System . out . printf ( "Maxm of %.1f,%.1f and %.1f is %.1f" , 6.6 , 8.8 , 7.7 , maximum ( 6.6 , 8.8 , 7.7 ) ); System . out . printf ( "Max of %s, %s and %s is %s" , "pear" , "apple" , "orange" , maximum ( "pear" , "apple" , "orange" ) ); } }

这将产生以下结果:

Integer Value :10

String Value :Hello World
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值