最近常碰到專案上,有人使用泛型的function

這邊查了網路介紹一下:

 

一般泛型使用

以黃彬華老師的scjp課本範例為例

price 這個屬性可能user會輸入interger、double、string等等...

 

class Book(T){

       T price;

      

public void setPrice(T price) {
		this.price = price;
	}

	public T getPrice() {
		return price;
	}

}

class Generics{

      public static void main(String[] args){

            Book<Integer> book1 = new Book<Integer>();

            book1.getPrice(580);

 

            Book<String> book2 = new Book<String>();

            book2.setPrice(一百二十元);

 

            Book<double> book3 = new Book<double>();

            book3.setPrice(402.5);

 

   }

}

 

而課本也有搭上 [ ? ] 、 [ extends ] 或 [ super ]

1. <? extends Number>: 代表可已是Number 或是 Number的子類別

即便是 Number 是介面,能要使用[extends] 而非[implements]

2. <? super Number>: 代表可已是Number的父類別

Ex:

 

class Book<T>{

   T price;

   public static void show(Book<? extends Number> b){

       System.out.println(XXXXX);

   }

}

 

class GenericsAdv{

    public static void main(String[] args){

        Book<Integer> book = new Book<Integer>();

        book,price = 580;

        Book.show(book);

        // Integer 是 Number的子類別,因為使用了<? extends> 故使用了Integer是正確的

    }

}

 

 

 

靜態泛型使用

我以本身專案為例

/**
* URL PARAMS 轉換 JAVA Bean
* @param urlParams
* @param clazz
* @return
*/
public static <T> T URLParam2Bean (String _urlParams, Class<T> clazz) {
   ObjectMapper mapper = new ObjectMapper();
   mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
   T o = (T) mapper.convertValue(JSONUtils.JSON2Map(_urlParams), clazz);
return o;
}

 

注一: 上網查後發現只要冠上static的泛型都會在static 後加上<T>   其餘的用法跟一般用法是一致的

注二: Class<T> 這種方式只是要表達所傳的class而已 

注三:  ObjectMapper() 為jacksonall裡的物件可去網址下載(http://www.java2s.com/Code/Jar/j/Downloadjacksonall190jar.htm)

本專案是用1.9.13版

<!-- jackson -->
<dependency>
   <groupId>org.codehaus.jackson</groupId>
   <artifactId>jackson-core-asl</artifactId>
   <version>1.9.13</version>
</dependency>
<dependency>
   <groupId>org.codehaus.jackson</groupId> 
   <artifactId>jackson-mapper-asl</artifactId>
   <version>1.9.13</version>
</dependency>

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 JoshS 的頭像
    JoshS

    JoshS的部落格

    JoshS 發表在 痞客邦 留言(0) 人氣()