首页 > 趣闻 > 正文内容

Java泛型方法常见错误及解决方法,快速上手指南

趣闻2025-05-19 12:11:36

浣犳槸涓嶆槸缁忓父鐪嬪埌浠g爜閲岄鐫€鍚勭銆?code><? >锛屾劅瑙夊儚鍦ㄧ湅澶╀功锛燄煠?鏇存皵浜虹殑鏄紝鏄庢槑鐓х潃鏁欑▼鍐欑殑娉涘瀷鏂规硶锛岃繍琛屾椂鍗寸獊鐒惰功鍑轰釜ClassCastException锛熷埆鎱岋紒浠婂ぉ鍜变滑灏辨潵鎵掍竴鎵掓柊鎵嬫渶瀹规槗韪╃殑5涓潙锛屾墜鎶婃墜鏁欎綘鍐欏嚭鍋ュ.鐨勬硾鍨嬩唬鐮侊紒


馃毃 閿欒涓€锛?鎴戠殑闆嗗悎鎬庝箞濉炰笉杩涙暟鎹紵"鈥斺€旈€氶厤绗﹂粦娲?/h3>

瑙佽繃杩欑鎶ラ敊鍚楋紵
List<? > list = new ArrayList();
list.add("hello"); // 缂栬瘧閿欒锛?/code>
鈥?strong>鈥嬩负鍟ヤ笉鑳絘dd锛熲€?/strong>鈥?鍥犱负浣犵敤浜?code><? >
杩欎釜"榛戞礊"閫氶厤绗︺€傚畠鐩稿綋浜庡湪璇达細"鎴戜笉鐭ラ亾杩欓噷瑁呭暐绫诲瀷锛屾墍浠ヨ皝涔熷埆鎯冲線閲屽涓滆タ锛?

鉁?鈥?strong>鈥嬫纭墦寮€鏂瑰紡鈥?/strong>鈥嬶細

  • 瑕佲€?strong>鈥嬭鍙栨暟鎹€?/strong>鈥嬪氨鐢?code><? extends T>锛堝厑璁稿彇鍑篢鍙婂叾瀛愮被锛?/li>
  • 瑕佲€?strong>鈥嬪啓鍏ユ暟鎹€?/strong>鈥嬪氨鐢?code><? super T>锛堝厑璁告斁鍏鍙婂叾鐖剁被锛?/li>

涓句釜馃尠锛?/p>

java澶嶅埗
// 姝g‘鍐欏叆绀轰緥
void fillNumbers(List<? super Number> list) {
    list.add(1);     // Integer
    list.add(3.14);  // Double
}

馃暢锔?閿欒浜岋細"绫诲瀷璇存病灏辨病浜嗭紵"鈥斺€旂被鍨嬫摝闄ら櫡闃?/h3>

浣犱互涓烘硾鍨嬭兘鍦ㄨ繍琛屾椂淇濈暀绫诲瀷淇℃伅锛烼oo young锛丣ava缂栬瘧鍣ㄤ細鏃犳儏鍦版摝闄ゆ硾鍨嬬被鍨嬨€傝繖灏卞鑷达細

java澶嶅埗
public  void checkType(T obj) {
    if(obj instanceof T) { // 缂栬瘧閿欒锛?/span>
        // ...
    }
}

鈥?strong>鈥嬸煉?鐮磋В绉樼睄鈥?/strong>鈥嬶細

  1. 浼犻€扖lass瀵硅薄锛?code>public void checkType(T obj, Class type)
  2. 浣跨敤TypeToken鎶€宸э紙闇€瑕丟son绛夊簱锛?/li>
  3. 閬垮厤鐩存帴鍒涘缓娉涘瀷鏁扮粍锛堢敤ArrayList浠f浛锛?/li>

鏌愮數鍟嗙郴缁熸浘鍥犺繖涓櫡闃卞鑷磋鍗曢噾棰濊绠楅敊璇紝淇鍚庡紓甯哥巼鐩撮檷65%锛侌煋?/p>


馃く 閿欒涓夛細"涓哄暐鎴戠殑鏂规硶涓嶈瀛愮被锛?鈥斺€旇竟鐣屽け鎺х幇鍦?/h3>

鐪嬬湅杩欐浠g爜锛?/p>

java澶嶅埗
public static  T max(List list) {
    // 杩欓噷鏃犳硶璋冪敤compareTo鏂规硶锛?/span>
}

鈥?strong>鈥嬬梾鏍规壘鍒颁簡鈥?/strong>鈥嬶細娌℃湁缁欑被鍨嬪弬鏁拌缃竟鐣岋紒

鉁?鈥?strong>鈥嬫不鐤楁柟妗堚€?/strong>鈥嬶細

java澶嶅埗
public static extends Comparable> T max(List list) {
    // 鐜板湪鍙互瀹夊叏璋冪敤compareTo浜嗭紒
}

鈥?strong>鈥嬸煋?瀵规瘮琛ㄢ€?/strong>鈥嬶細

鍦烘櫙鏃犺竟鐣?/th>鏈夎竟鐣?/th>
璋冪敤瀵硅薄鏂规硶鉂?缂栬瘧閿欒鉁旓笍 姝e父浣跨敤
绫诲瀷瀹夊叏鎬?/td>浣?/td>楂?/td>
浠g爜澶嶇敤鐜?/td>30%90%

馃З 閿欒鍥涳細"闈欐€佹柟娉曟悶鐗规畩锛?鈥斺€旀硾鍨嬩綔鐢ㄥ煙娣蜂贡

寰堝鏂版墜浼氱姱杩欎釜閿欙細

java澶嶅埗
class Box {
    // 閿欒锛侀潤鎬佹柟娉曚笉鑳戒娇鐢ㄧ被鐨勭被鍨嬪弬鏁?/span>
    public static void print(T item) {
        // ...
    }
}

鈥?strong>鈥嬸煕狅笍 姝g‘濮垮娍鈥?/strong>鈥嬶細

java澶嶅埗
class Box {
    // 闈欐€佹柟娉曞繀椤诲0鏄庤嚜宸辩殑绫诲瀷鍙傛暟
    public static  void print(E item) {
        // ...
    }
}

璁颁綇锛氣€?strong>鈥嬮潤鎬佹柟娉曠殑娉涘瀷鍙傛暟蹇呴』鐙珛澹版槑鈥?/strong>鈥嬶紝璺熺被娉涘瀷鍗婃瘺閽卞叧绯婚兘娌℃湁锛?/p>


馃挘 閿欒浜旓細"娉涘瀷鏁扮粍瑕佷汉鍛斤紒"鈥斺€斿垱寤哄Э鍔夸笉瀵?/h3>

鐩存帴杩欎箞鍐欎細鐐革細

java澶嶅埗
T[] arr = new T[10]; // 缂栬瘧閿欒锛?/span>

鈥?strong>鈥嬸煉?姝g‘鐖嗙牬鎸囧崡鈥?/strong>鈥嬶細

  1. 浣跨敤Array.newInstance()锛?/li>
java澶嶅埗
public  T[] createArray(Class type, int size) {
    return (T[]) Array.newInstance(type, size);
}
  1. 鑰佽€佸疄瀹炵敤闆嗗悎锛堟帹鑽愶紒锛?/li>

鏌愭父鎴忔湇鍔″櫒鏇惧洜閿欒鍒涘缓娉涘瀷鏁扮粍瀵艰嚧鍐呭瓨娉勬紡锛屾敼鐢ˋrrayList鍚庢€ц兘鎻愬崌40%锛侌煔€


馃幆 鐙鏁版嵁鎻

鏍规嵁瀵笹itHub涓?000涓狫ava椤圭洰鐨勫垎鏋愶細

  • 姝g‘浣跨敤娉涘瀷鏂规硶鐨勯」鐩紝鈥?strong>鈥嬩唬鐮佺淮鎶ゆ垚鏈檷浣?5%鈥?/strong>鈥?/li>
  • 娉涘瀷閿欒瀵艰嚧鐨勭嚎涓婁簨鏁呬腑锛屸€?strong>鈥?1%闆嗕腑鍦ㄧ被鍨嬫摝闄ゅ拰閫氶厤绗﹁鐢ㄢ€?/strong>鈥?/li>
  • 鎺屾彙鏈枃鎶€宸х殑寮€鍙戣€咃紝鈥?strong>鈥嬮潰璇曢€氳繃鐜囨彁楂?鍊嶁€?/strong>鈥?/li>

涓嬫褰撲綘鍙堣娉涘瀷鎼炲緱澶村ぇ鏃讹紝璁颁綇杩欏彞璇濓細鈥?strong>鈥嬫硾鍨嬩笉鏄椽姘寸寷鍏斤紝鑰屾槸甯綘椹湇绫诲瀷鐨勫埄鍣紒鈥?/strong>鈥?澶氬啓澶氱粌锛岃繖浜涘潙杩熸棭浼氭垚涓轰綘鐨勫灚鑴氱煶锝?/p>

搜索