色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java定義受限制的類型參數(shù)操作

瀏覽:33日期:2022-08-26 13:02:56

有時(shí)您可能想限制可以在參數(shù)化類型中用作類型參數(shù)的類型。 例如,對(duì)數(shù)字進(jìn)行操作的方法可能只希望接受Number或其子類的實(shí)例。 這就是有界類型參數(shù)的用途。

受限制參數(shù)類型的方法示例

要聲明有界類型參數(shù),請(qǐng)列出類型參數(shù)的名稱,后跟extends關(guān)鍵字,然后是其上限,在本例中為Number

請(qǐng)注意,在這種情況下,extends通常用于表示“擴(kuò)展”(如在類中)或“實(shí)現(xiàn)”(如在接口中)。

package generics;/** * 定義受限制的方法 * * @author psdxdgK1DT * */public class Box<T> {private T t;public void set(T t) {this.t = t;}public T get() {return t;}/** * 通過(guò)修改我們的通用泛型方法以包含此有界類型參數(shù),現(xiàn)在編譯將失敗,因?yàn)槲覀儗?duì)inspect的調(diào)用仍包含String: * By modifying our generic method to include this bounded type parameter * compilation will now fail, since our invocation of inspect still includes a String: * inspect:單詞:檢查 * @param <U> * @param u */public <U extends Number> void inspect(U u) {System.out.println('T:' + t.getClass().getName());System.out.println('U:' + u.getClass().getName());}public static void main(String[] args) {Box<Integer> integerBox = new Box<Integer>();integerBox.set(new Integer('some text'));integerBox.inspect('some test');這里會(huì)出現(xiàn)預(yù)編譯錯(cuò)誤integerBox.inspect(10);}}

在顯示器上會(huì)出現(xiàn)紅色的波浪線表示編譯錯(cuò)誤

java定義受限制的類型參數(shù)操作

如果強(qiáng)行編譯則會(huì)報(bào)錯(cuò):

program run result:

Exception in thread “main” java.lang.Error: Unresolved compilation problem: The method inspect(U) in the type Box is not applicable for the arguments (String)

at generics.Box.main(Box.java:36)

譯文:

未解決的編譯錯(cuò)誤

Box類的inspect(U)方法不可應(yīng)用于(String)類型參數(shù)

使用受限類型參的類可調(diào)用受限邊界方法

除了限制可用于實(shí)例化泛型類型的類型外,有界類型參數(shù)還允許您調(diào)用在邊界中定義的方法:

//使用受限類型參數(shù)的類public class NaturalNumber<T extends Integer> { private T n; public NaturalNumber(T n) { this.n = n; } public boolean isEven() { return n.intValue() % 2 == 0; } // ...}

isEven方法通過(guò)n調(diào)用Integer類中定義的intValue方法。

多重受限邊界(Multiple Bounds)

The preceding example illustrates the use of a type parameter with a single bound, but a type parameter can have multiple bounds:

<T extends B1 & B2 & B3> A type variable with multiple bounds is a subtype of all the types listed in the bound. If one of the bounds is a class, it must be specified first. For example:

Class A { /* … / } interface B { / … / } interface C { / … */ }

class D <T extends A & B & C> { /* … */ } If bound A is not specified first, you get a compile-time error:

class D <T extends B & A & C> { /* … */ } // compile-time error

泛型算法

有界類型參數(shù)是實(shí)現(xiàn)泛型算法的關(guān)鍵。考慮下面的方法,該方法計(jì)算數(shù)組T[]中大于指定元素elem的元素?cái)?shù)。

public static <T> int countGreaterThan(T[] anArray, T elem) { int count = 0; for (T e : anArray) if (e > elem) // compiler error ++count; return count;}The implementation of the method is straightforward,but it does not compile because the greater than operator (>) applies only to primitive typessuch as short, int, double, long, float, byte, and char. You cannot use the > operator to compare objects. To fix the problem, use a type parameterbounded by the Comparable<T> interface:public interface Comparable<T> { public int compareTo(T o);}The resulting code will be:public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) { int count = 0; for (T e : anArray) //因?yàn)檫@里的T是受限制的類型參數(shù),實(shí)現(xiàn)了Comparable接口,于是可以使用接口的方法compareTo if (e.compareTo(elem) > 0) ++count; return count;}

以上這篇java定義受限制的類型參數(shù)操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 九月婷婷亚洲综合在线 | 男人的天堂精品国产一区 | 日韩美女视频一区 | 日本人在线看片 | 国产a久久精品一区二区三区 | 成人亚洲精品 | a级做爰片毛片视频 | 精品在线视频观看 | 日韩男人的天堂 | 成人免费视频播放 | 亚洲视频一区二区在线观看 | 在线永久免费观看黄网站 | 免费一看一级毛片全播放 | 在线观看黄网视频免费播放 | 老人久久www免费人成看片 | 久久亚洲欧洲日产国码 | 97免费视频免费视频 | 免费岛国小视频在线观看 | 伊人青| 久久国产精品亚洲 | 成人免费影视网站 | 亚洲精品理论 | 国产成人女人视频在线观看 | 日韩欧美一中字暮 | 国产成人黄网址在线视频 | 一级片aaaa | 日韩精品一区二区三区四区 | 亚洲欧美日韩专区 | 中文字幕高清在线天堂网 | 欧美成人爽毛片在线视频 | 国产真实一区二区三区 | 极品精品国产超清自在线观看 | 99久久综合精品免费 | 日韩欧美国产一区二区三区 | 亚洲欧美一区二区三区在线播放 | 女人成午夜大片7777在线 | 免费一级欧美性大片 | 国产手机精品a | 久久精品国产精品青草不卡 | 成人高清视频在线观看 | 国产精品午夜性视频 |