1. java 如何獲取基本類的class
publicstaticObjectgetType(Classc)throwsException{
Fieldf=c.getDeclaredField("TYPE");
Objectobj=f.get(c);
returnobj;
}
publicstaticvoidmain(String[]args)throwsException{
System.out.println(getType(Integer.class));
}
2. java class
java class是什麼,讓我們一起了解一下?
CLASS是在網路工程中的一種協議,在java中有兩種對象:實例對象和Class對象。每個類運行時的類型信息就是用Class對象表示的,它包含了與類有關的信息,其實實例對象就是通過Class對象來創建的。
那我們如何獲得Class對象?
1、Class.forName(「類的全限定名」)
2、實例對象.getClass()
3、類名.class (類字面常量)
實戰操作:如何獲得一個實例的類型類?
Object類中包含一個方法名叫getClass,利用這個方法就可以獲得一個實例的類型類。類型類指的是代表一個類型的類,因為一切皆是對象,類型也不例外,在Java使用類耐滑型類來表示一個類型,所有的類型類都是Class類的實例。getClass()會看到返回Class 。
JDK中,普通的Class.newInstance()方法的定義返回Object,要將該返回類型強制轉換為另一種類型,但是使用泛型的Class ,Class.newInstance()方法具有一個特定的返回類型。
代碼如下: public class Main2 { public static void main(String[] args) throws InstantiationException, IllegalAccessException { System.out.println("1-----------"); Dog dog1 = creatNew1(Dog.class); System.out.println(dog1.name + " is " + dog1.type+ "\n"); System.out.println("2-----------"); Animal ani1 = creatNew2(Cat.class); Cat cat1 = (Cat) ani1; System.out.println(cat1.name + " is " + cat1.type + "\n"); System.out.println("3-----------"); Object obj = creatNew3(Dog.class); Dog dog2 = (Dog) obj; System.out.println(dog1.name + " is " + dog2.type + "\n"); System.out.println("4-----------"); Object obj2 = creatNew4(Cat.class); Cat cat2 = (Cat) obj2; System.out.println(cat2.name + " is " + cat2.type + "\n"); System.out.println("5-----------"); Object obj3 = creatNew5(new Cat()); Cat cat3 = (Cat) obj3; 蔽畝碼 System.out.println(cat3.name + " is 宏哪" + cat3.type + "\n"); } /** * 此方法是一個非泛型類中的泛型方法,參數為Class 類型,可以傳入任何類,但是Class 將參數在函數內部的類型固定為 T類,使用clazz.newInstance(),返回的類型也為固定的 T 類型。 * 如: 傳入Dog.class, 函數中的 T 固定為Dog.class,函數返回的是Dog類型,不需要強制轉換為Dog類型 * (當然,函數返回類型也可以是Object類型,但是沒必要) */ public static T creatNew1(Class clazz) throws IllegalAccessException, InstantiationException { System.out.println(clazz);//列印具體傳入的類型。 return clazz.newInstance(); } /** * 此方法參數是Class ,只能傳入Animal及其子類的類型,函數返回類型只能聲明為Animal或Object類型, * 如:傳入Cat.class,函數返回一個Animal的子類對象,需將此子類對象強制轉換為具體的子類(即Cat類)。 */ public static Animal creatNew2(Class clazz) throws IllegalAccessException, InstantiationException { System.out.println(clazz);//列印具體傳入的類型。 return clazz.newInstance(); } /** * 此方法參數是Class,可傳入任何類,其返回只能聲明為Object類對象。 * 如:傳入Dog.class, 返回的是Object類型的對象,需強制轉換為Dog類型的對象。 */ public static Object creatNew3(Class clazz) throws IllegalAccessException, InstantiationException { System.out.println(clazz);//列印具體傳入的類型。 return clazz.newInstance(); } /** * 傳入參數Class 和 上一個方法傳入 Class 的區別還不是很清楚,其返回只能聲明為Object類對象。 * 如:Cat.class, 返回的是Object類型的對象,需強制轉換為Cat類型的對象。 */ public static Object creatNew4(Class clazz) throws IllegalAccessException, InstantiationException { System.out.println(clazz);//列印具體傳入的類型。 return clazz.newInstance(); } /** * 傳入Object類型的對象,返回也聲明為Object類型。 */ public static Object creatNew5(Object object) { System.out.println(object.getClass());//列印具體傳入的類型。 return object; } } abstract class Animal { public String type = "type = animal "; } class Dog extends Animal { public String name = "name = gou"; } class Cat extends Animal { public String name = "name = mao"; } /** * 這些方法,傳的參數聲明不同,其返回的聲明也必然要隨之不同。 */
3. java 如何獲取 泛型的 class
package com.leo.common;
public class Genericity<T> {
public static void main(String[] args) {
Genericity<String> test = new Genericity<>("test1");
System.out.println(test.getGenericityName());
Genericity<Double> test1 = new Genericity<>(new Double(123));
System.out.println(test1.getGenericityName());
}
private T data;
public Genericity(T data) {
this.data = data;
}
public T getData() {
return this.data;
}
public String getGenericityName() {
return data.getClass().getName();
}
}
4. java web怎麼獲取class類的編譯路徑
javaweb中的java文件會在伺服器中生成class文件,比如tomcat目錄下的webapps目錄下,放你的javaweb項目,在項目中有個WEB-INF目錄,裡面有一個classes文件夾,裡面放的都是對源碼進行編譯後生成的.class文件
5. java中如何得到一個數組的class的元素class
1、在Java中,所有的數組都有一個預設的屬性length,用於獲取數組中元素的個數。
2、數組的復制:System.array()。淺拷貝
3、數組的排序:Arrays.sort()。
4、在已排序的數組中查找某個元素:Arrays.binarySearch()。
5、獲取Class的三種方式:
(1)利用對象調用getClass()方法獲取該對象的Class實例;
(2)使用Class類的靜態方法forName(),用類的名字獲取一個Class實例;
(3)運用.class的方式來獲取Class實例,對於基本數據類型的封裝類,還可以採用.TYPE來獲取相對應的基本數據類型的Class實例。
6. java獲取泛型class
很多朋友都想知道java怎麼獲取泛型class?下面侍襲就一起來了解一下吧~
獲取泛型Class的方法
Class類的方法:
public Type getGenericSuperclass()
方法作用:
如果超類是參數化類型,則返回的 Type 對象必須准確反映源代碼中所使用的實際類型參數。如果以前未曾創建表示超類的參數化類型,則創建這個類型。有關參數化老做兄類型創建過程的語義,請參閱 ParameterizedType 聲明胡好。如果此 Class 表示 Object 類、介面、基本類型或 void,則返回 null。如果此對象表示一個數組類,則返回表示 Object 類的 Class 對象。
ParameterizedType類的方法:
Type[] getActualTypeArguments()
方法作用:返回表示此類型實際類型參數的 Type 對象的數組。
注意,在某些情況下,返回的數組為空。如果此類型表示嵌套在參數化類型中的非參數化類型,則會發生這種情況。
二、獲取泛型Class對象
(解析Excel的類代碼較多,這里定義幾個簡單的類記錄)
定義獲取泛型Class對象的工具類
GenericSuperclassUtil
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class GenericSuperclassUtil { /* * 獲取泛型類Class對象,不是泛型類則返回null */ public static Class getActualTypeArgument(Class clazz) { Class entitiClass = null; Type genericSuperclass = clazz.getGenericSuperclass(); if (genericSuperclass instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass) .getActualTypeArguments(); if (actualTypeArguments != null && actualTypeArguments.length > 0) { entitiClass = (Class ) actualTypeArguments[0]; } } return entitiClass; } }
定義BaseService ,用來測試不使用父類時泛型Class的獲取
BaseService
public class BaseService { public Class getEntityClass() { return GenericSuperclassUtil.getActualTypeArgument(this.getClass()); } }
測試BaseService.getEntityClass() @Testpublic void testBaseService() { System.out.println(new BaseService ().getEntityClass());// 控制台輸出:null }
7. java 怎麼獲取t的class
1. public Type getGenericSuperclass()
用來返回表示當前Class 所表示的實體(類、介面、基本類型或 void)的直接超類的Type。如果這個直接超類是參數化類型的,則返回的Type對象必須明確反映在源代碼中聲明時使用的類型。比如:
import java.lang.reflect.ParameterizedType;
public class GT1 extends GT2<Integer>{
public static void main(String[] args) {
System.out.println(((ParameterizedType)new GT1().getClass().getGenericSuperclass()));
}
}
則輸出結果即為:
GT2<java.lang.Integer>
如果此Class代表的是Object 類、介面、基本類型或 void,則返回 null。。如果此對象表示一個數組類,則返回表示 Object 類的 Class 對象。
2. public Type[] getGenericInterfaces()
與上面那個方法類似,只不過Java的類可以實現多個介面,所以返回的Type必須用數組來存儲。
以上兩個方法返回的都是Type對象或數組,在我們的這個話題中,Class都是代表的參數化類型,因此可以將Type對象Cast成ParameterizedType對象。而 ParameterizedType對象有一個方法, getActualTypeArguments()。
public Type[] getActualTypeArguments()
用來返回一個Type對象數組,這個數組代表著這個Type聲明中實際使用的類型。接著使用上面的例子:
import java.lang.reflect.ParameterizedType;
public class GT1 extends GT2<Integer>{
public static void main(String[] args) {
System.out.println(((ParameterizedType)new GT1().getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
}
8. Java 獲取包所有class
既然是封到包里的,遍歷確實是有點麻煩
思路如下:
輸入包名
轉換為資源路徑名,即以『/』替換『.』
找到ClassLoader,並獲得資源名對於的資源對象
判斷資源對象是否為jar包內
4.1若否,則使用文件系統進行處理為文件夾,之後遍歷名稱進行類載入。這里直接使用資源路徑名,會是其真實位置,不用關注因部署在tomcat上而產生的路徑變化。
4.2若是,則構造一個jar文件類,使用jar操作類遍歷內容,進行類載入。
實現參考(其實我只是把它的思路總結出來):http://guoliangqi.iteye.com/blog/644876