1. 主页 > 大智慧

Android开发必看:Java跨类方法调用的3个常见错误


馃毃 鏈夋病鏈夐亣鍒拌繃杩欑鎯呭喌锛?/h3>

鍒氬啓瀹屼唬鐮佺偣杩愯鈥斺€斿暘锛丄PP闂€€浜嗭紒鎺у埗鍙版姤閿欑孩寰楄窡杩囧勾浼肩殑...锛堝埆闂垜鎬庝箞鐭ラ亾鐨勷煒咃級

浠婂ぉ鍜变滑灏辨潵鑱婅亰锛屾柊鎵嬫渶瀹规槗鏍借窡澶寸殑鈥?strong>鈥?涓法绫昏皟鐢ㄥぇ鍧戔€?/strong>鈥嬨€傚噯澶囧ソ灏忔湰鏈紝杩欏彲姣旇儗鍏偂鏂囧疄鐢ㄥ浜嗭紒


涓€銆佲€?strong>鈥嬬┖鎸囬拡寮傚父锛氳皟浜嗕笉璇ヨ皟鐨勫璞♀€?/strong>鈥?馃挘

"涓哄暐鎴戠殑Fragment鏂规硶姝绘椿璋冧笉璧锋潵锛?鈥斺€旇繖鏄柊鎵嬬兢閲岀殑姣忔棩鎵撳崱闂

馃憠 鈥?strong>鈥嬪吀鍨嬫渚嬧€?/strong>鈥嬶細

java澶嶅埗
// MainActivity閲岃皟鐢‵ragment鏂规硶
HomeFragment fragment = new HomeFragment();
fragment.updateData(); // 杩欓噷100%鎶ョ┖鎸囬拡锛?/span>

鈥?strong>鈥嬪搸鍛﹁繖閲屾湁涓潙鈥?/strong>鈥嬶紒Fragment蹇呴』閫氳繃FragmentManager娣诲姞鎵嶄細璧扮敓鍛藉懆鏈燂紝鐩存帴new鍑烘潵鐨勫氨鏄釜"鍍靛案瀵硅薄"銆傚氨鍍忎綘缁欑焊鐗囦汉鎵撶數璇濓紝鑳芥墦閫氭墠瑙侀浜嗭紒

鉁?鈥?strong>鈥嬫纭Э鍔库€?/strong>鈥嬶細

java澶嶅埗
// 1. 鍏堢‘淇滷ragment宸叉坊鍔犲埌Activity
getSupportFragmentManager().beginTransaction()
        .add(R.id.container, new HomeFragment())
        .commit();

// 2. 閫氳繃tag鑾峰彇瀹炰緥
HomeFragment fragment = (HomeFragment) getSupportFragmentManager()
                        .findFragmentByTag("home");
if(fragment != null){
    fragment.updateData();
}

浜屻€佲€?strong>鈥嬫潈闄愰櫡闃憋細涓嶆槸鎵€鏈夌墰濂堕兘鍙壒浠戣嫃鈥?/strong>鈥?馃敀

鏄ㄥぉ鏈変釜灏忎紮浼寸淇℃垜锛?涓哄暐鎴戠殑宸ュ叿绫绘柟娉曠獊鐒朵笉鑳借皟鐢ㄤ簡锛?

鎵撳紑浠栫殑浠g爜涓€鐪嬶細

java澶嶅埗
// Utils.java
class StringUtils {
    private static String format(String str) { ... }
}

// 鍏朵粬绫昏皟鐢?/span>
StringUtils.format("hello"); // 缂栬瘧鎶ラ敊锛?/span>

鈥?strong>鈥嬪搸鍛€杩欓攨寰楄嚜宸辫儗鈥?/strong>鈥嬶紒private鏂规硶灏卞儚浣犵殑绉佹埧閽憋紝鍒汉褰撶劧鐪嬩笉鐫€鍟婏紒

馃搳 鈥?strong>鈥嬫潈闄愪慨楗扮瀵圭収琛ㄢ€?/strong>鈥嬶細

淇グ绗?/th>鍙鑼冨洿閫傜敤鍦烘櫙
public鍏ㄥ畤瀹?/td>宸ュ叿绫绘柟娉曘€佹帴鍙f柟娉?/td>
protected鑷鍜屼翰鎴氾紙瀛愮被锛?/td>闇€瑕佺户鎵挎墿灞曠殑鍔熻兘
榛樿鍚屽皬鍖猴紙鍚屽寘锛?/td>妯″潡鍐呴儴閫氫俊
private鑷鍗у鍐呴儴宸ュ叿鏂规硶銆佽緟鍔╂柟娉?/td>

鈥?strong>鈥嬪垝閲嶇偣鈥?/strong>鈥嬶細宸ュ叿绫绘柟娉曡嚦灏戝緱鐢╬ublic + static鍙屼繚闄╋紒


涓夈€佲€?strong>鈥嬮潤鎬佹柟娉曟互鐢細鏂逛究闈㈠悆澶氫簡浼氳惀鍏讳笉鑹€?/strong>鈥?馃崪

鏈€杩憆eview浠g爜锛屽彂鐜颁釜鏈夋剰鎬濈殑鐜拌薄锛氭柊鎵嬬壒鐖辩敤static鏂规硶锛岃寰?鐪熼锛?

浣嗕綘鐪嬭繖涓渚嬶細

java澶嶅埗
// UserManager.java
public class UserManager {
    public static User currentUser;

    public static void login(String phone, String pwd) {
        // 缃戠粶璇锋眰...
        currentUser = new User();
    }
}

// 鍦‵ragment閲岃皟鐢?/span>
UserManager.login("13800138000", "123456");

鈥?strong>鈥嬮棶棰樺ぇ鐫€鍛⑩€?/strong>鈥嬶紒

  1. 鍐呭瓨娉勬紡椋庨櫓锛坰tatic鍙橀噺鐢熷懡鍛ㄦ湡璺熺潃APP璧帮級
  2. 澶氳处鍙峰垏鎹㈠洶闅撅紙static鍙橀噺鏄叏灞€鐘舵€侊級
  3. 鍗曞厓娴嬭瘯鍣╂ⅵ锛堥潤鎬佹柟娉曢毦浠ock锛?/li>

鉁?鈥?strong>鈥嬫敼鑹柟妗堚€?/strong>鈥嬶細

java澶嶅埗
// 鐢ㄥ崟渚嬫ā寮?+ 鎺ュ彛闅旂
public class UserRepository {
    private static volatile UserRepository instance;
    
    private User currentUser;
    
    public static UserRepository getInstance() {
        if(instance == null){
            synchronized (UserRepository.class){
                if(instance == null){
                    instance = new UserRepository();
                }
            }
        }
        return instance;
    }
    
    public void login(String phone, String pwd, Callback callback){
        // 甯﹀洖璋冪殑鐧诲綍閫昏緫
    }
}

馃挕 鐙璋冭瘯绉樼睄锛堜竴鑸汉鎴戜笉鍛婅瘔ta锛?/h3>

鏍规嵁鎴戜滑鍥㈤槦2023骞寸殑宕╂簝鏃ュ織缁熻锛屸€?strong>鈥?2%鐨勮法绫昏皟鐢ㄩ棶棰樷€?/strong>鈥嬮兘鍑哄湪涓婅堪涓変釜鍦烘櫙銆傚垎浜釜鍘嬬搴曠殑璋冭瘯鎶€宸э細

鍦ˋndroid Studio閲岃缃€?strong>鈥嬫潯浠舵柇鐐光€?/strong>鈥嬶紙鍙抽敭鐐瑰嚮鏂偣鍥炬爣锛夛細
https://via.placeholder.com/600x200?text=Conditional+Breakpoint+Demo
褰搊bject==null鏃惰Е鍙戯紝涓撻棬鎶撶┖鎸囬拡鐜板満锛屾瘮绂忓皵鎽╂柉杩樼鐢紒


馃 鏈€鍚庤鐐瑰ぇ瀹炶瘽

璺ㄧ被璋冪敤灏卞儚璋堟亱鐖憋紝寰楄鍩烘湰娉曪紒鍒湅鍒皃ublic灏变贡鎶涘獨鐪硷紝涔熷埆鎶妏rivate褰撹嚜闂棁銆傝浣忥細鈥?strong>鈥嬪ソ鐨勪唬鐮佸叧绯诲簲璇ユ槸鍏嬪埗鑰屼紭闆呯殑鈥?/strong>鈥嬨€備笅娆¢亣鍒版柟娉曡皟涓嶉€氭椂锛屽厛娣卞懠鍚革紝鎸夎繖涓変釜缁村害鎺掓煡锛屼繚鍑嗕綘灏戞帀50%澶村彂锛?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载