鍍金池/ 教程/ Java/ Java泛型多重邊界
Java泛型方法擦除
Java泛型無界類型擦除
Java泛型綁定類型擦除
Java泛型類型推斷
Java泛型不能重載
Java泛型不能轉(zhuǎn)換類型
Java泛型有界類型參數(shù)
Java泛型類型擦除
Java泛型集合(Set)
Java泛型參數(shù)化類型
Java泛型-類型參數(shù)命名約定
Java泛型無界通配符
Java泛型不能使用實例
Java泛型不能使用instanceof運算符
Java泛型教程
Java泛型多重邊界
Java泛型下限通配符
Java泛型不能使用異常
Java泛型不能使用數(shù)組
Java泛型環(huán)境設(shè)置
Java泛型類
Java泛型通配符使用指南
Java泛型原始類型
Java泛型上限通配符
Java泛型映射(Map)
Java泛型方法
Java泛型是什么?
Java泛型不能使用原始類型
Java泛型列表(List)
Java泛型多種類型參數(shù)
Java泛型不能使用靜態(tài)域

Java泛型多重邊界

類型參數(shù)可以有多個邊界。

語法

public static <T extends Number & Comparable<T>> T maximum(T x, T y, T z)

在上面代碼中,

  • maximum - 最大值是一種通用方法。
  • T - 通用類型參數(shù)傳遞給泛型方法。 它可以采取任何對象。

描述

T是傳遞給泛型類的類型參數(shù)應(yīng)該是Number類的子類型,并且必須包含Comparable接口。 如果一個類作為綁定傳遞,它應(yīng)該在接口之前先傳遞,否則編譯時會發(fā)生錯誤。

示例

使用您喜歡的編輯器創(chuàng)建以下java程序,并保存到文件:MultipleBounds.java 中,代碼如下所示 -

package com.yiibai;

public class MultipleBounds {
    public static void main(String[] args) {
        System.out.printf("Max of %d, %d and %d is %d\n\n", 30, 24, 15,
                maximum(30, 24, 15));

        System.out.printf("Max of %.1f,%.1f and %.1f is %.1f\n\n", 16.6, 28.8,
                17.7, maximum(16.6, 28.8, 17.7));
    }

    public static <T extends Number & Comparable<T>> T maximum(T x, T y, T z) {
        T max = x;
        if (y.compareTo(max) > 0) {
            max = y;
        }

        if (z.compareTo(max) > 0) {
            max = z;
        }
        return max;
    }

    // Compiler throws error in case of below declaration
    /*
     * public static <T extends Comparable<T> & Number> T maximum1(T x, T y, T
     * z) { T max = x; if(y.compareTo(max) > 0) { max = y; }
     * 
     * if(z.compareTo(max) > 0) { max = z; } return max; }
     */
}

執(zhí)行上面代碼,得到以下結(jié)果 -

Max of 30, 24 and 15 is 30

Max of 16.6,28.8 and 17.7 is 28.8