java鎬庝箞鑾峰彇娉涘瀷T鐨刢lass
鍦↗ava涓紝鐢变簬绫诲瀷鎿﹂櫎鐨勯檺鍒讹紝鏃犳硶鐩存帴鑾峰彇娉涘瀷绫诲瀷鐨凜lass瀵硅薄銆備絾鏄紝鍙互閫氳繃浠ヤ笅涓ょ鏂瑰紡鏉ヨ幏鍙栨硾鍨嬬被鍨嬬殑Class瀵硅薄锛?/p>
- 閫氳繃浼犻€掍竴涓狢lass鍙傛暟鏉ヨ幏鍙栨硾鍨嬬被鍨嬬殑Class瀵硅薄锛?/li>
public class MyClass<T> {
private Class<T> type;
public MyClass(Class<T> type) {
this.type = type;
}
public Class<T> getType() {
return type;
}
}
// 浣跨敤绀轰緥
MyClass<String> myClass = new MyClass<>(String.class);
Class<String> stringClass = myClass.getType();
鍦ㄤ笂闈㈢殑绀轰緥涓紝閫氳繃鍦ㄦ瀯閫犳柟娉曚腑浼犻€掍竴涓狢lass鍙傛暟鏉ヨ幏鍙栨硾鍨嬬被鍨嬬殑Class瀵硅薄锛屽苟淇濆瓨鍦ㄤ竴涓垚鍛樺彉閲忎腑锛岀劧鍚庨€氳繃getType鏂规硶鏉ヨ幏鍙栬Class瀵硅薄銆?/p>
- 閫氳繃鍙嶅皠鏉ヨ幏鍙栨硾鍨嬬被鍨嬬殑Class瀵硅薄锛?/li>
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class MyClass<T> {
public Class<T> getType() {
Type type = getClass().getGenericSuperclass();
ParameterizedType paramType = (ParameterizedType) type;
Type[] actualTypeArguments = paramType.getActualTypeArguments();
return (Class<T>) actualTypeArguments[0];
}
}
// 浣跨敤绀轰緥
MyClass<String> myClass = new MyClass<String>();
Class<String> stringClass = myClass.getType();
鍦ㄤ笂闈㈢殑绀轰緥涓紝閫氳繃浣跨敤鍙嶅皠锛屽彲浠ヨ幏鍙栧埌娉涘瀷绫诲瀷鐨凜lass瀵硅薄銆傞鍏堥€氳繃getClass鏂规硶鑾峰彇褰撳墠瀵硅薄鐨凜lass瀵硅薄锛岀劧鍚庨€氳繃getGenericSuperclass鏂规硶鑾峰彇璇lass瀵硅薄鐨勭埗绫荤殑Type瀵硅薄锛屾帴鐫€鍒ゆ柇璇ype瀵硅薄鏄惁涓篜arameterizedType绫诲瀷锛屽鏋滄槸鐨勮瘽锛岄€氳繃getActualTypeArguments鏂规硶鑾峰彇鍒板疄闄呯殑绫诲瀷鍙傛暟鐨凾ype瀵硅薄鏁扮粍锛屾渶鍚庨€氳繃寮哄埗杞崲涓篊lass瀵硅薄鏉ヨ幏鍙栧埌娉涘瀷绫诲瀷鐨凜lass瀵硅薄銆?/p>
闇€瑕佹敞鎰忕殑鏄紝鍦ㄤ娇鐢ㄧ浜岀鏂瑰紡鑾峰彇娉涘瀷绫诲瀷鐨凜lass瀵硅薄鏃讹紝蹇呴』鍦ㄥ瓙绫讳腑瀹炵幇涓€涓棤鍙傜殑鏋勯€犳柟娉曪紝鍚﹀垯浼氭姏鍑篊lassCastException寮傚父銆?/p>
相关问答