1. 程式人生 > >java泛型物件初始化--java泛型物件能例項化嗎T t=new T()

java泛型物件初始化--java泛型物件能例項化嗎T t=new T()

java中沒法得到泛型引數化型別,因為在編譯期沒法確定泛型引數化型別,也就找不到對應的類位元組碼檔案,自然就不行了 
泛型反射的關鍵是獲取ParameterizedType,再呼叫它的getActualTypeArguments()方法獲得實際繫結的型別。但注意public class BookManager<Book>是不能被反射的,因為擦拭法的緣故。只有在Superclass 或者成員變數(Field.getGenericType())等有函式返回ParameterizedType的時候才能成功反射, 


要麼搞個建構函式把引數型別傳進去才行

我就寫了一個建構函式如下:

	private static <T> T newTclass(Class<T> clazz) throws InstantiationException, IllegalAccessException{
		T a=clazz.newInstance();
		return a;
		
	}

使用方法:

try {
						T user = newTclass(User.class);					
					} catch (InstantiationException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IllegalAccessException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

當然 這裡的 User.class也可以由上層函式傳進來。

相關推薦

java物件初始--java物件例項T t=new T()

java中沒法得到泛型引數化型別,因為在編譯期沒法確定泛型引數化型別,也就找不到對應的類位元組碼檔案,自然就不行了  泛型反射的關鍵是獲取ParameterizedType,再呼叫它的getAct

JAVA的newInstance()和new的區別(JAVA反射機制,通過類名來獲取該類的例項物件)

newInstance()是實現IOC、反射、面對介面程式設計 和 依賴倒置 等技術方法的必然選擇,new 只能實現具體類的例項化,不適合於介面程式設計。 裡面就是通過這個類的預設建構函式構建了一個物件,如果沒有預設建構函式就丟擲InstantiationException, 如果沒有訪問預設建構函式的許可權

Java中可以直接呼叫類中靜態方法,不用例項

轉載自   http://stevengw.blog.163.com/blog/static/583447512012319112140126/ 先通俗的分析下,我們把類看作是一個房子。房子裡面有傢俱,桌椅板凳之類的,房子裡面還有人。 房子裡面所有的人都應該是共有一套傢俱

Java 介面不例項之匿名內部類

上面的程式碼是安卓開發裡面及其常見的一段程式碼,最近僥倖撿起了一點基礎,有些不解,就去原始碼裡面查了查, public void setOnClickListener(@Nullable OnClickListener l) { if (!isClick

例項物件

  面嚮物件語言中,一切皆物件,哪些物件不能被例項化呢?3種:介面、抽象類、單例。這3種物件,一旦你想new一個例項出來,直接編譯報錯。   其中介面是最直接的,它連建構函式都沒有,很明顯我們沒法去例項化一個連建構函式都沒有的物件。單例的建構函式是私有的,那麼你也沒法在除了單例之外的地方去例項化它,但它一般

介面和抽象類不例項物件

ArrayList points = new ArrayList(); Iterator i = points.iterator(); points是ArrayList的物件,用points.iterator轉換成迭代器的形式也就是i物件; i是Iterator的引用

25歲轉行零基礎學Java最快需要多長時間?學完找工作

如果你想盡快並且很紮實的學好Java,建議最好是報一個班,分享一下我學習Java的經歷。 不知不覺中潭州Java線上學習的第二階段學習也結束了,第二階段給我的感覺與第一階段完全不一樣,相比於第一階段,程式碼量是急劇增多,這就要求我們從第二階段開始對於學習一刻也不能放鬆。第二階段的專案是一個網上購

面向物件程式設計(一)建立類,例項,屬性引用

  在python中,用變量表示特徵,用函式表示技能,因而類是變數與函式的結合體,物件是變數與方法(指向類的函式)的結合體。 class 類名:#定義一個類 類體   類有兩種作用:屬性引用和例項化 t=類名()#例項化 類名加括號就是例項化,會自動觸發__in

Action實現ModelDriven,不例項所需類的問題

對於Action實現ModelDriven後,我們可以通過getModel()方法獲取所需要例項化的類。 比如UserAction實現了ModelDriven<User>,那麼User這個物件是在一個請求經過ModelDrivenInterceptor的時候,在

C++中純虛擬函式的實現原理是什麼,為什麼該純虛擬函式不例項

虛擬函式的原理採用 vtable。 類中含有純虛擬函式時,其vtable 不完全,有個空位。 即“純虛擬函式在類的vftable表中對應的表項被賦值為0。也就是指向一個不存在的函式。由於編譯器絕對不允許有呼叫一個不存在的函式的可能,所以該類不能生成物件。在它的派生類中,除非

Qt中虛擬函式不例項解決

voiddrawComplexControl(ComplexControlcontrol, constQStyleOptionComplex*option, QPainter*painter,constQWidget*widget=0)const=0; error:

例項抽象類“錯誤的解決辦法

這篇文章講解一個程式設計中遇到一個錯誤,那就是提示”不能例項化抽象類的錯誤“,在輸出視窗有如下的錯誤提示資訊,如下圖:根據具體情況不同,可能涉及到的類也可能不同,但是道理是一樣的,之所以出現這樣的錯誤呢,其實是因為,你繼承的類的抽象方法沒有在繼承類中進行重寫,比如在這裡,我

springcloud feign @FeignClient bean 不例項

@EnableFeignClients與@ComponentScan有衝突 兩種註解都會搜尋注入指定目錄中的bean @EnableFeignClients 引入了FeignClientsRegistrar類,實現了spring的bean、資源的載入 FeignClient

Java 知識點整理-10.Java集合框架 去除ArrayList中重複字串、自定義物件 棧和佇列 JDK5新特性 asList() toArray(T[] a) ArrayList迴圈巢狀

詳細標題:去除ArrayList中重複字串、自定義物件元素方式 棧和佇列 泛型 JDK5新特性(增強for迴圈 三種迭代(普通for、迭代器、增強for)中的元素能否刪除 靜態匯入 可變引數)Arrays工具類的asList() Collection中toArray(T[] a) 集合巢狀之Arra

集合物件初始

標準定義: //但是在jdk1.7以後 後面的泛型可以不用寫,編譯器會自動補充(某些情況下失效); Stack<Integer> stack=new Stack<Integer>();   今天寫程式碼時特意測試了一下泛型集合初始化的兩種方法

java:集合框架(ArrayList儲存字串和自定義物件並遍歷版)

A:案例演示     * ArrayList儲存字串並遍歷泛型版 import java.util.ArrayList; import java.util.Iterator; import com.

通過java反射技術獲取的真實型別並對其例項

public DaoBaseInterfaceImpl() { // 反射得到T的真實型別 ParameterizedType ptype = (ParameterizedType) thi

java 物件轉換成另外一個類物件

物件轉換成另一個類物件 package com.mw.usims.fts.util; import com.mw.usims.fts.model.BaseModel; import org.apache.poi.ss.formula.functions.T; impor

JAVA例項程式碼

ParameterizedType ptype = (ParameterizedType) this.getClass().getGenericSuperclass(); Class

Java基礎語法<十二> 程序設計

清除 extend 原生態 cast color 強制 方式 限定 只為 1 意義 泛型程序設計意味著編寫的代碼可以被很多不同類型的對象所重用。 常見應用 : ArrayList 2 K T V E ? object等的含義 類型變量使用大寫形式 E &ndash