A. java中的泛型的問題
public BaseDao(){
Class clazz=this.getClass(); //通過當前對象(this)獲取當前類
clazz.getGenericSuperclass(); //返回當前類的父類的Type
//轉換成有泛型的ParameterizedType類
ParameterizedType parameterizedType=(ParameterizedType)clazz.getGenericSuperclass();
//上面三句其實就是為了獲取BaseDao類本身
Type[] types = parameterizedType.getActualTypeArguments();
this.type=(Class<T>)types[0];
//上面兩句是獲取運行期的泛型類型,返回給當前對象(this)的type屬性
}
B. java中如何得到泛型參數的class
在Java中,泛型的類型信息在運行時確實無法直接獲取,這主要是因為編譯器在編譯過程中會移除泛型類型信息。然而,我們可以通過反射機制間接獲取到泛型的具體類型。例如,假設有一個父類Parent,它聲明了一個泛型參數T:
public class Parent<T> { ... }
如果有一個子類Child繼承自Parent,並且指定了泛型參數,我們可以在Child類中使用反射獲取到這個泛型參數的具體類型。具體實現方式如下:
首先定義父類Parent:
import java.lang.reflect.ParameterizedType;
public class Parent {
public Parent() {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
System.out.println("type==" + type);
System.out.println("entityClass==" + type.getActualTypeArguments()[0]);
System.out.println("getOwnerType==" + type.getOwnerType());
System.out.println("getRawType==" + type.getRawType());
}
}
然後定義子類Child,指定泛型參數:
public class Child extends Parent<String> {
}
通過這種方式,我們可以在Child類的構造函數中列印出父類Parent中泛型參數的具體類型。這展示了如何在運行時獲取到泛型參數的類型信息。
需要注意的是,這種方法依賴於反射機制,因此會增加程序的復雜性和運行時的性能開銷。此外,這種方法僅適用於泛型參數類型在繼承關系中明確指定的情況。
總結來說,雖然Java中泛型類型信息在運行時不可直接獲取,但通過反射機制我們可以間接地獲取到這些信息,這對於某些特定場景下的類型檢查和操作非常有用。
C. java的類是什麼意思
使用Java語言意味著面向對象的編程。所以,你必須要學會如何創建、引用和繼承已建立的類。
Java的結構是基於面向對象思想的。除了那些最基本的類型如整數、單精度浮點數之外的其它成分,均是以類的形式出現的。正是由於Java的面向對象特性,所以它能給用戶提供一種具有良好的可擴充性的編程環境,並使得程序員可以充分利用別的程序員的成果,而不必重復以前的工作。
學習完本章後,你應該是已經可以輕松地創建自己的類,並能引用和繼承已有的類,這將不公使你有能力去編寫更簡捷更有效的代碼,同時也是進一步學習Java所必需的。
定義類的結構
每個對象都是屬於某種type(即類型、類別或者種類),例如「作者」這個「對象」或者「物體」就屬於「人類」這個類別,拖鞋屬於「鞋類」等等。再Java中,用type的同義詞class表示類型,中文術語譯為「類」。
■ 類的基本概念
■ 類的基本組成
■ 類的實例創建
類的成員函數的說明與使用
我們把屬性和方法成為這個對象的「成員」,因為它們構成一個對象的主要部分,沒有了這兩樣東西,那麼對象也沒有什麼存在的意義了。哪怕只是一粒石頭,或許它沒有什麼操作的方法,但是也有描述它的屬性。真的存在沒有屬性和方法的類,不過它產生出來的對象規則,然後遵守這個規則的對象,才能去做某些特定的事情。
■ 類的成員函數的說明
■ 不同類型的成員函數
■ 成員函數的重載
■ 靜態成員
■ 構造和析構成員函數
建立Java的應用程序
只要類中有一個名為main的方法,那麼這個類就可以成為一個能夠被JVM調用運行的 Java Application。 不過這個方法有四個必要的聲明條件:
1. 聲明為public;
2. 必須是類一級的(static) ;
3. 沒有返回值(viod);
4. 只有一個String類型的數組當作參數。
這四個條件缺一不可。
■ main成員函數
■ 命令行參數
■ 輕松處理命令行參數
類的集合 — 包
■ 理解包(package)的基本概念
■ 定義一個包
■ 引用已定義過的包
類的深入研究
■ 在Java中使用繼承
■ 成員函數的重載
■ 使用介面
■ 類的轉換
■ null,this和supper變數