java泛型的定义规则_Java泛型一:泛型定義及規則

泛型定義

泛型是Java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。這種參數類型可以用在類、接口和方法的創建中,分別稱為泛型類、泛型接口、泛型方法。 Java語言引入泛型的好處是安全簡單。

用來實現參數的“任意化”,“任意化”帶來的缺點是要做顯式的強制類型轉換,而這種轉換是要求開發者對實際參數類型可以預知的情況下進行的。對於強制類型轉換錯誤的情況,編譯器可能不提示錯誤,在運行的時候才出現異常,這是一個安全隱患。

泛型的好處是在編譯的時候檢查類型安全,並且所有的強制轉換都是自動和隱式的,以提高代碼的重用率。

泛型規則限制

1、泛型的類型參數只能是類類型(包括自定義類),不能是簡單類型;

2、同一種泛型可以對應多個版本(因為參數類型是不確定的),不同版本的泛型類實例是不兼容的;

3、泛型的類型參數可以有多個;

4、泛型的參數類型可以使用extends、super語句,例如。習慣上稱為“有界類型“;

5、泛型的參數類型還可以是通配符類型。例如Class> classType = Class.forName("java.lang.String");

示例對比

有這樣一個需求:定義矩形對象,使矩形對象的寬度、高度既可以支持整形又可以支持字符串類型(例子可能不太恰當~~)。在不使用泛型的情況下,我們可能會定義兩個類,一個類支持整形參數,另一個類支持字符串類型參數,如下:

類一:package com.ips.volatiles.demo1;

public class RectangleInteger {

private Integer width;

private Integer height;

public RectangleInteger(Integer width, Integer height){

this.width = width;

this.height = height;

}

public Integer getWidth() {

return width;

}

public void setWidth(Integer width) {

this.width = width;

}

public Integer getHeight() {

return height;

}

public void setHeight(Integer height) {

this.height = height;

}

public void showDetails(){

System.out.println("the rectangle, width is " + this.width + " height is " + this.height);

}

public static void main(String [] args){

Integer width = 10;

Integer height = 5;

RectangleInteger rect = new RectangleInteger(width, height);

width = rect.getWidth();

height = rect.getHeight();

rect.showDetails();

}

}

類二:package com.ips.volatiles.demo1;

public class RectangleString {

private String width;

private String height;

public RectangleString(String width, String height){

this.width = width;

this.height = height;

}

public String getWidth() {

return width;

}

public void setWidth(String width) {

this.width = width;

}

public String getHeight() {

return height;

}

public void setHeight(String height) {

this.height = height;

}

public void showDetails(){

System.out.println("the rectangle, width is " + this.width + " height is " + this.height);

}

public static void main(String [] args){

String width = "20";

String height = "40";

RectangleString rect = new RectangleString(width, height);

width = rect.getWidth();

height = rect.getHeight();

rect.showDetails();

}

}

類三(泛型方式定義):package com.ips.volatiles.demo1;

public class Rectangle {

private T width;

private T height;

public Rectangle(T width, T height){

this.width = width;

this.height = height;

}

public T getWidth() {

return width;

}

public void setWidth(T width) {

this.width = width;

}

public T getHeight() {

return height;

}

public void setHeight(T height) {

this.height = height;

}

public void showDetails(){

System.out.println("the rectangle, width is " + this.width + " height is " + this.height);

}

public static void main(String [] args){

Integer width = 10;

Integer height = 5;

Rectangle rect = new Rectangle(width, height);

width = rect.getWidth();

height = rect.getHeight();

rect.showDetails();

String widthStr = "20";

String heightStr = "40";

Rectangle rect1 = new Rectangle(widthStr, heightStr);

widthStr = rect1.getWidth();

heightStr = rect1.getHeight();

rect1.showDetails();

}

}

作用

再次強調一下泛型的作用:泛型的好處是在編譯的時候進行類型安全檢查,並且所有的強制轉換都是自動和隱式的,以提高代碼的重用率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值