2010-07-13 22 views
9

için dize karşılaştırmalarında kullanıldığında vurgula Eclipse'i String eşitliğini test etmek için == operatörünün kullanımını vurgulamak için kullanabileceğim bir yol var mı? Yanlışlıkla .equals()'u aramak yerine onu kullanmaya devam ediyorum.Eşitlik operatörü (==) Eclipse

Bunu gerçekten bir uyarıya dönüştürmek ve aslında nesne eşitliği için dizeleri karşılaştırmak istediğim durumda olmak üzere bir @SuppressWarnings ek açıklamasını kaldırmak istiyorum.

Düzenleme zamanında bu kötü alışkanlığı kırmaya yardımcı olmak için herhangi bir araç kullanabilir miyim?

cevap

10

FindBugs, PMD veya CheckStyle gibi static analysis araçlarını kullanın.

Bunların her biri vb

Ant görevler, Maven eklentileri ile birlikte her biri için Eclipse eklentileri vardır Dize eşitlik (Findbugs rule, PMD rule, Checkstyle rule) ilişkin kuralları vardır.

+1

Kesinlikle Eclipse için Findbugs kullanımı ikinci olurdum .... bu küçük tür kodlama sorunları yakalamak için bir tanrıça olmuştur! – mikera

+1

hepsi bu özellikle, hudson gibi sürekli entegrasyon sunucusu üzerinde birlikte kullanıldığında (insanların gerçekten sonuçlara bakması şartıyla :-)) –

+1

bunlardan herhangi birinin düzenleme zamanında çalışıp çalışmadığını biliyor musunuz? biz zaten bunların bir kısmı gece yapımlarının bir parçası olarak çalışıyoruz ve rapor dosyaları oluşturuyoruz. Yazarken hata/uyarıyı vurgulayan bir şey istiyorum. –

5

has already been given sorusunun açık yanıtı, ancak burada doğrudan bir yanıt olmayan bir uyarı var: obj.equals, eğer obj null ise başarısız olabilir. Yani sık sık böyle bir kod kullanmak gerekecektir: mystr1 null ise bu

if(mystr1.equals(mystr2)) 

bir NullPointerException ile başarısız olur

if(mystr1 != null && mystr1.equals(mystr2)) 

çünkü.

bu nedenle diye, karşılaştırma dize bilinen sabit aşağıdaki sözdizimi sıklıkla kullanılır olduğunda:

if("ABCDEF".equals(mystr1)) 

ziyade bu nedenle

if(mystr1.equals("ABCDEF")) 

daha birçok kütüphaneler ( apache commons/lang benzeri) Bu denetimleri birleştiren yardımcı işlevler sağlayın:

// this is the definition of org.apache.commons.lang.StringUtils.equals(String, String) 
public static boolean equals(String str1, String str2) { 
    return str1 == null ? str2 == null : str1.equals(str2); 
} 

// this is the definition of org.apache.commons.lang.ObjectUtils.equals(Object, Object) 
public static boolean equals(Object object1, Object object2) { 
    if (object1 == object2) { 
     return true; 
    } 
    if ((object1 == null) || (object2 == null)) { 
     return false; 
    } 
    return object1.equals(object2); 
} 

Bu yöntemlerin kullanılması genellikle iki düzlemden birinin,

1

önceki yanıtlara katılmadığından emin olmadıkça düz eşittirden daha güvenlidir. Tutulma sırasında bir hatadır ve burada oy kullanabilirsiniz: https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095.

Eclipse çok iyi bir şekilde == ile karşılaştırdığınızda bu ne istediğinizi (veya orijinal yazarın istediği) nadiren yaptığınız gibi.