首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 類命名衝突:自定義 Long 類導致找不到符號錯誤

     編輯:程式設計綜合問答

初學者常犯錯誤:自定義類名與 JDK 核心類重名(如 Long、String、Math),導致編譯器解析到錯誤類,報「找不到符號」或方法不存在錯誤。

問題代碼


import java.lang.*;

public class Long {  // 錯誤:與 java.lang.Long 衝突
    public static void main(String[] args) {
        long b1 = 0x300L;
        long b2 = 0200L;
        System.out.println("b1:" + Long.toBinaryString(b1)); // 調用的是自定義 Long 類
        System.out.println("b2:" + Long.toBinaryString(b2));
    }
}

錯誤原因

  • import java.lang.*; 引入 java.lang.Long
  • 本地定義 public class Long,同包無需導入即可見
  • 編譯器按「最近原則」解析 Long 為本地類
  • 本地類無 toBinaryString 靜態方法 → 編譯錯誤

解決方案

方案一:重命名自定義類(推薦)


public class LongDemo {  // 改為非衝突名
    public static void main(String[] args) {
        long b1 = 0x300L;
        long b2 = 0200L;
        System.out.println("b1:" + Long.toBinaryString(b1)); // 正確調用 java.lang.Long
        System.out.println("b2:" + Long.toBinaryString(b2));
    }
}

方案二:使用全限定名(不推薦,碼頭)


public class Long {
    public static void main(String[] args) {
        long b1 = 0x300L;
        System.out.println("b1:" + java.lang.Long.toBinaryString(b1)); // 強制指定
    }
}

避坑指南:禁用類名列表

最佳實踐

  1. 類名加業務前綴:UserService、OrderController、LongConverter
  2. 包名倒置域名:com.company.module,降低同包衝突概率
  3. IDE 提示重視:IntelliJ/Eclipse 會警告「類名與 JDK 類衝突」
  4. 靜態導入慎用:import static java.lang.Long.*; 更易產生歧義

補充:八進制/十六進制字面量


long b1 = 0x300L;  // 十六進制 0x300 = 768
long b2 = 0200L;   // 八進制 0200 = 128 (Java 7+ 支持 0o200 寫法)
long b3 = 0b1010L; // 二進制 (Java 7+)

輸出:


b1:1100000000
b2:10000000

總結

自定義類名 絕不可與 java.lang 包下類重名。遇到「找不到符號」「方法未定義」先檢查類名衝突。養成「業務前綴 + 功能後綴」命名習慣,從源頭杜絕此類低級錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類別常見衝突類名
基本類型包裝類Boolean, Byte, Character, Double, Float, Integer, Long, Short
核心工具類Math, String, StringBuilder, StringBuffer, System, Thread, Runnable
集合框架List, Set, Map, ArrayList, HashMap, HashSet, Collection, Collections
異常體系Exception, RuntimeException, NullPointerException, IOException
IO/網絡File, InputStream, OutputStream, Socket, URL, URLConnection