1. 程式人生 > >泛型類獲取泛型型別

泛型類獲取泛型型別

1.再使用jdbcTemplate時有個query(sql, new RowMapper<User>(){} )方法,返回實體物件列表;

List<User> list = jdbcTemplate.query(sql, new RowMapper<User>() {
			List<User> users = new ArrayList<User>();
			public User mapRow(ResultSet rs, int rowNum) throws SQLException {
				User user = new User();
				user = new User();
				user.setName(rs.getString("name"));
				user.setSex(rs.getString("sex"));
				return user;
			}
		});

想到這樣會有很多重複程式碼,看到spring提供了
List<User> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper(User.class));
但其要求資料庫欄位和實體類欄位要完全一致;

想要資料庫欄位和實體類欄位不同的話,可以用註解去註釋資料庫欄位,通過反射獲取所有註解。

自己寫泛型的RowMapper藉口實現類,獲得泛型方法的泛型是關鍵步驟,得到泛型型別才可以通過反射得到想要的實體類

小例子:

package zjl.reflect;


/**
 * 反射Test
 * 
 * @author zjl
 *
 */
public class ReflectPoint<T> {
	
	private Class clazz;
	
	
	
	public ReflectPoint() {
		ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
		this.clazz = (Class) type.getActualTypeArguments()[0];
		System.out.println("TYPE 為:"+clazz.getSimpleName());
		System.out.println(clazz);
	}
	public void printType(){
		//System.out.println(this.getClass().getTypeParameters()[0]);
		System.out.println("TYPE 是-》"+clazz.getSimpleName());
		
	}
	
	
}

實現類:
package zjl.reflect;

public class BasePoint extends ReflectPoint<Student>{

}

測試類:
package zjl.reflect;


/**
 * 
 * @author zjl
 *
 */
public class ReflectTest {
	
	public static void main(String[] args) throws Exception{
		
		BasePoint bp =  new BasePoint();
		bp.printType();
		
	}
}
再測試過程中,不能從當前類中直接或得當前類的泛型,而是獲得了父類的泛型,從而通過繼承來獲得自己的泛型類,因為繼承的父類已經確定了泛型型別了,從當前類中獲取泛型型別的方法沒有找到,不知道跟java泛型擦除有沒有關,有知道的請告知

相關推薦

獲取型別

1.再使用jdbcTemplate時有個query(sql, new RowMapper<User>(){} )方法,返回實體物件列表; List<User> list = jdbcTemplate.query(sql, new RowMapper&

Java 之路 (十五) -- 上(方法、有界型別引數、與繼承、型別推斷)

Thinking in Java 中關於泛型的講解篇幅實在過長,前後嘗試閱讀這一章,但總是覺得找不到要點,很迷。於是放棄 Thinking in Java 泛型一章的閱讀,轉而官方教程,本章可以算作官方教程的中文版。 1.為什麼使用泛型 簡單來說

c#中的自定義方法和接口

泛型方法 return bsp 其中 tel sts code 方式 void ? 泛型的產生其中一個原因就是為了解決原來集合類中元素的裝箱和拆箱問題: 一、泛型類: /// <summary> /// 返回前臺的消息 /// &

java介面、方法)

泛型介面: 定義一個泛型介面:   通過類去實現這個泛型介面的時候指定泛型T的具體型別。 指定具體型別為Integer: 指定具體型別為String: 指定具體型別為一個自定義的物件: 泛型類: 在編譯器,是無法知道K和V具體是什麼型別,只

2018-10-09 方法

通過引數化型別來實現在同一份程式碼上操作多種資料型別,利用“引數化型別”將型別抽象化,從而實現靈活的複用。   泛型類: 定義一個類,如果這個類中某些欄位的型別是不確定的,這些型別可以在類構造的時候確定下來。 class ClassA<T> {

Scala 函式、上邊界 和下邊界

泛型類 泛型類:在Scala的類中定義引數型別 泛型類的應用場景:對類中的某些成員(field和method中的引數或變數)進行統一的型別限制,從而確保程式的健壯性和穩定性 class MyCollection[T]{ private val list =new ListBuf

一步步學spark之一scala高階特性中函式3.6

一步步學spark之一scala高階特性中泛型類與泛型函式 泛型類中的泛型是包容具體型別變換的,對這些具體不同的型別,泛型類根據型別進行統一的操作,很多時候泛型類就相當於模板。 泛型定義一個泛型引數 兩個泛型引數 定義空的Map 返回的型別中是

方法、介面

泛型的幾種正確寫法:   |--List<String> list = new ArrayList<String>();  ----推薦使用的寫法   |--List<String> list = new ArrayList(); ---可以使用,但不推薦,是為了相容老版本

C#入門學習集合、方法、約束、委託

本章閱讀列表 泛型很難理解?不然 泛型集合和ArrayList的裝箱拆箱 常見的泛型型別 泛型類和泛型方法 泛型約束 泛型委託 泛型很難理解?不然 在接觸的一個新的概念的時候,總會感覺難以理解,當你掌握並能熟練地使用的時候,發現這個概念其實簡單的,我相信

2.方法

1.定義簡單泛型類: public class Pair<T> { private first; private second; public Pair() { first = null; second = null; } public Pa

C#裡面的(T),方法,介面等簡單解釋

只是比較簡單的解釋,在實際使用中,如果遇到需要深入研究的場景,再翻閱相關資料深入研究下。 一、泛型T 這個T在實際使用中很常見,比如List<T>。其實我們還可以寫成List<object>。但是這樣寫會有一個問題。比如我把一個int資料存入到一個List<ob

C#基礎:方法

 public class Farm<T> :IEnumerator<T>  where T :Animal//泛型類使用where關鍵字進行約束  {                                                                 

C# T 方法的約束條件用法

類型變量 where class a 實現 fin 關系 int -h 支持 class A<T> where T:new() 這是類型參數約束,where表名了對類型變量T的約束關系。where T:A 表示類型變量是繼承於A的,或者是A本省。where T:

方法

規則和限制  1、泛型的型別引數只能是類型別(包括自定義類),不能是簡單型別。  2、同一種泛型可以對應多個版本(因為引數型別是不確定的),不同版本的泛型類例項是不相容的。  3、泛型的型別引數可以有多個。  4、泛型的引數型別可以使用extends語句,例如<T

Java中的方法區別和聯絡

泛型的概念大家應該都會,不懂的百度或者google,在java中泛型類的定義較為簡單<span style="font-size:18px;"><span style="font-s

方法

throws exceptio sys fun hello one type trac tac 一、泛型類   1.1、定義泛型類 public class A<T> { // 泛型類 private T a; public T

過載和覆蓋的區別,通過反射獲取實際型別,列舉要點,五個最常用的集合之間的區別和聯絡,final總結

java面試碰到過的題目之方法過載和覆蓋的區別。 1. 過載方法必須滿足以下條件:  i. 方法名相同。 ii. 方法的引數型別、個數、順序至少有一項不同。 iii. 方法的返回型別可以不相同。 iv. 方法的修飾符可以不相同。 2. 重寫方法必須滿足以下條件:  i. 子

java 獲取 型別(介面及超

package generic.portal; /** * Created by Administrator on 2017/1/10. */ public interface GenericInterface<T> { } package gener

獲取的模板型別方法

package com.zjh.test; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import org.junit.Test; abstract class Ba

在base獲取型別物件

class A<T,S> {     //獲取S的class public Class<T> poClass = (Class<T>) (((ParameterizedType) this.getClass().getGeneric