提高你的Java代码质量吧:少用静态导入
一、分析?
從Java 5開始引入靜態導入語法(import static),其目的是為了減少字符輸入量,提高代碼的可閱讀性,以便更好地理解程序。?
但是,濫用靜態導入會使程序更難閱讀,更難維護。靜態導入后,代碼中就不用再寫類名了,但是我們知道類是“一類事物的描述”,缺少了類名的修飾,靜態屬性和靜態方法的表象意義就會被無限方法,這會讓閱讀者很難弄清楚其屬性或方法代表何以,甚至是哪一個類的屬性(方法)都要思考一番(當然,IDE友好提示功能另說),特別是在一個類中有多個靜態導入語句時,若還是用*(星號)通配符,把一個類的所有靜態元素都導入進來,那簡直就是噩夢。
二、場景?
如此段代碼:?
import static java.lang.Math.PI; public class MathUtils{ //計算圓面積 public static double calCircleArea(double r){ return PI * r * r; } //計算球面積 public static double calBallArea(double r){ return 4 * PI * r * r; } }靜態導入把Math類中的PI常量引入到本類中,這回是程序更簡單,更容易閱讀,只要看到PI就知道是圓周率,不用每次都要把類名寫出來。?
又如此段代碼:?
import static org.jnuit.Assert.*; public class DaoTest{ @Test public void testInsert(){ //斷言 assertEquals("foo",foo); assertFalse(Boolean.FALSE); } }我們從程序中很容易判斷出assertEquals方法時用來判斷兩個值是否相等的,assertFalse方法則是斷言表達式為假的。這就是具有明確、清晰表象意義的工具類,使用靜態導入,減少代碼量,提高代碼可讀性的好處。?
但是,如此段代碼:?
import static java.lang.Double.*; import static java.lang.Math.*; import static java.lang.Integer.*; import static java.text.NumberFormat.*; public class Client{ //輸入半徑和精度要求,計算面積 public static void main(String[] args){ double s = PI * parseDouble(args[0]); NumberFormat nf = getInstance(); nf.setMaxinumFractionDigits(parseInt(args[1])); formatMessage(nf.format(s)); } //格式化消息輸出 public static void formatMessage(String s){ System.out.println("圓面積是:" + s); } }就這么一段程序:常量PI,這個知道是圓周率;parseDouble方法可能是Double類的一個轉換方法;getInstance方法時那個類的?Client本地類?NumberFormate類?這個方法和formatMessage方法沒有任何區別—這代碼太難閱讀了,非機器不可閱讀。?
三、建議?
對于靜態導入,一定要遵循兩個規則:?
1.不要使用*(星號)通配符,除非是導入靜態常量(只包含常量的類或接口)。?
2.方法名是具有明確、清晰表象意義的工具類。
總結
以上是生活随笔為你收集整理的提高你的Java代码质量吧:少用静态导入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用SmsManager服务群发短信
- 下一篇: Javascript模板引擎handle