Java'da geçerli @SuppressWarnings uyarı adlarının listesi nedir?


264

@SuppressWarningsJava'da geçerli uyarı adlarının listesi nedir ?

Arasındaki gelir bit ("")in @SuppressWarnings("").


3
Bu soru gerçekten güzel ve cevaplar faydalı. JCP'den biri bakarsa, bir baskılama uyarısı eklemenin ne kadar dağınık olduğunu anlamalısınız. Dava, tire, deve davası yok, sadece düz bir karmaşa var, bunu standartlaştırmak güzel olurdu.
Snicolas

"ProhibitedExceptionDeclared"Eclipse Collections Framework ( org.eclipse.collections.impl.block.function.checked.ThrowingFunction) içinde görüyorum ve bu aşağıda listelenmiyor.
kevinarpe

Yanıtlar:


250

IDE'nize veya derleyicinize bağlıdır.

Eclipse Galileo için bir liste :

  • tüm uyarıları bastırmak için
  • boks / kutudan çıkarma işlemlerine ilişkin uyarıları bastırmak için boks
  • döküm işlemleriyle ilgili uyarıları bastırmak için döküm
  • kullanımdan kaldırılmış ek açıklamaya ilişkin uyarıları bastırmak için dep-ann
  • kullanımdan kaldırılma ile ilgili uyarıları bastırmak için kullanımdan kaldırma
  • anahtar ifadelerindeki eksik molalarla ilgili uyarıları bastırmak için son adım
  • nihayet geri dönmeyen blokla ilgili uyarıları bastırmak için
  • gizleme halk buna bağıl bastırmak uyarıları gizlemek değişken
  • Bir switch deyimindeki eksik girişlere ilişkin uyarıları bastırmak için uncomplete-switch
  • nls olmayan dize değişmezlerine göre uyarıları bastırmak için nls
  • null analizine göre uyarıları bastırmak için null
  • cesareti kırılmış veya yasaklanmış referansların kullanımına ilişkin uyarıları bastırmak için kısıtlama
  • serileştirilebilir sınıf için eksik serialVersionUID alanına göre uyarıları bastırmak için serial
  • Statik erişimli yanlış statik erişimine göre bastırmak uyarıları
  • sentetik erişim iç sınıflardan optimize edilmemiş erişim göre bastırmak uyarılara
  • denetlenmeyen işlemlerle ilgili uyarıları bastırmak için işaretlenmemiş
  • niteliksiz alan erişim alanı erişimi niteliksiz göreli bastırmak uyarıları
  • kullanılmayan koda göre uyarıları bastırmak için kullanılmaz

Indigo ekler listesi :

  • javadoc , javadoc uyarılarına göre uyarıları bastırıyor
  • rawtypes göreceli ham tiplerinin kullanımına bastırmak uyarıları
  • statik olarak bildirilebilecek yöntemlere göre uyarıları bastırmak için static-method
  • süper , süper çağırma olmadan bir yöntemi geçersiz kılma ile ilgili uyarıları bastırmak için

Juno ekler listesi :

  • kaynak türü closeable kaynaklarının kullanımına göre bastırmak uyarıları
  • senkronize edilmiş bir yöntemi geçersiz kılarken senkronizasyonun eksik olması nedeniyle uyarıları bastırmak için senkronizasyon geçersiz kıl

Kepler ve Luna, Juno ( liste ) ile aynı jeton listesini kullanıyor .

Diğerleri de benzer ancak farklılık gösterir.


Hangi durumlarda boş bir uyarıyı bastırmak yararlı olur?
Jesse Jashinsky

@Jesse: Derleyici yanlış olduğu zaman (örn. "Aptal Flanders 'uyarısı"). Derleme deneyin: void foo( Object o ) { boolean b; if ( ( b = o == null ) ) o = new Object(); o.toString(); }. Bazı ortamlarda (örneğin NetBeans / Java 6 JDK [1.6.0_41] ağırlık 7.3) oluşturur "o possibly null"de o.toString()olsa çağrı obu noktada boş olamaz.
par

2
@cletus: Tutulmaya uyarı türü eklemek mümkün müdür? Sorun şu ki, takım üyelerimizden biri IntelliJ kullanıyor ve IDE'nin Eclipse'de uyarı veren başka bastırıcı uyarı türlerine sahip olması :) Eclipse Indigo'da tercihleri ​​belirleyebilirsiniz: Kullanılmayan SuppressWarnings belirteçlerini yok sayın, ancak bu işe yaramaz gibi görünüyor ...
KC

semicolonLuna'da çalışmıyor gibi görünüyor? :( Birisi semicolongerçekten geçerli olup olmadığını doğrulayabilir mi?
Kissaki

"Nihai olmayan alanda senkronizasyon" uyarısını bastırmanın değeri nedir?
matteo

48

Tüm değerlere izin verilir (tanınmayanlar dikkate alınmaz). Tanınanların listesi derleyiciye özeldir.

In Java Tutorials unchecked ve deprecationJava Dil Şartname gereği iki uyarı olarak listelenen nedenle, hepsi derleyiciler ile geçerli olmalıdır:

Her derleyici uyarısı bir kategoriye aittir. Java Dil Belirtimi iki kategoriyi listeler: kullanımdan kaldırma ve işaretlenmemiş.

Java Dil Belirtimi'nin içinde tanımlandıkları belirli bölümler sürümler arasında tutarlı değildir. Java SE 8 Spesifikasyonu'nda uncheckedve deprecationbölüm 9.6.4.5'te derleyici uyarıları olarak listelenmiştir . @SuppressWarnings ve 9.6.4.6 @ Deprecated .

Sun'ın derleyicisi için run, javac -Xbu sürüm tarafından tanınan tüm değerlerin bir listesini verir. 1.5.0_17 için liste şu şekilde görünür:

  • herşey
  • karşı koyma
  • kontrolsüz
  • suya düşmek
  • yol
  • seri
  • en sonunda

43

Liste derleyiciye özeldir. Ancak Eclipse'de desteklenen değerler şunlardır :

  • Kullanımdan kaldırılmış kodun içinde bile allDeprecation
  • allJavadoc geçersiz veya eksik javadoc
  • tanımlayıcı olarak kullanılan assert'in tanımlayıcı varlığı
  • boks otomatik boks dönüşümü
  • Bir char dizisi, açıkça bir dizeye dönüştürülmeden bir dize birleştirmesinde kullanıldığında charConcat
  • conditionAssign olası kaza sonucu boolean atama
  • Yapıcı adına sahip constructorName yöntemi
  • dep-ann eksik @Deprecated ek açıklama
  • kullanımdan kaldırılmış kodun veya kullanımdan kaldırılmış kodun dışındaki bir üyenin kullanımdan kaldırılması
  • cesareti kırılmış erişim kuralıyla eşleşen türlerin cesaretsiz kullanımı
  • emptyBlock belgesiz boş blok
  • enumSwitch , tamamlanmamış anahtar tamamlanmamış enum anahtar
  • düşme olası düşme durumu
  • fieldHiding başka bir değişken gizleme alan
  • Nihai bağlı olan finalBound tipi parametresi
  • nihayet sonunda normal şekilde tamamlanmamasını engelle
  • yasak erişim kuralıyla eşleşen türlerin yasak kullanımı
  • fieldHiding, localHiding, typeHiding ve maskedCatchBlock için makro gizleme
  • indirectStatic statik üyesine dolaylı referans
  • intf Süper arabirim olarak kullanılan ek açıklama türü
  • intfNonInherited arabirimi devralınmamış yöntem uyumluluğu
  • javadoc geçersiz javadoc
  • localHile yerel değişkeni başka bir değişkeni gizliyor
  • maskedCatchBlocks gizli catch bloğunu engeller
  • nls nls olmayan dize değişmez değerleri (etiketlerin olmaması // $ NON-NLS-)
  • Etkisi olmayan noEffectAssign ataması
  • boş potansiyel eksik veya yedekli boş denetim
  • Boşluk eksik boş denetim
  • yıl içinde eksik @Override ek açıklaması
  • bir parametreye paramAssign ataması
  • pkgDefaultMethod paket varsayılan yöntemini geçersiz kılma girişimi
  • ham türdeki ham kullanım a (parametrelenmiş tür yerine)
  • noktalı virgül gereksiz noktalı virgül veya boş ifade
  • seri eksik serialVersionUID
  • specialParamHiding yapıcısı veya başka bir alanı gizleyen ayarlayıcı parametresi
  • indirectStatic ve staticReceiver için statik erişimli makro
  • Statik alan elde etmek veya statik yöntem çağırmak için statik olmayan bir alıcı kullanılıyorsa staticReceiver
  • süper bir çağrı yapmadan bir yöntemi geçersiz kılma
  • suppress enable @SuppressWarnings
  • sentetikİç sınıf için sentetik erişim gerçekleştirirken erişim , sentetik erişim
  • görevler kaynak kodundaki görev etiketleri için desteği etkinleştirir
  • typeHiding type parametresi başka bir türü gizleme
  • denetlenmeyen denetlenmeyen tür işlemi
  • Gereksiz başka fıkra hükmü
  • niteliksiz-alan-erişimi, niteliksizAlan için niteliksiz referans alanı
  • unusedArgument, unusedImport, unusedLabel, unusedLocal, unusedGrivate ve unusedThrown için kullanılmayan makro
  • unusedArgument kullanılmayan yöntem bağımsız değişkeni
  • unusedImport kullanılmayan ithalat referans
  • unusedLabel kullanılmayan etiket
  • unusedLocal kullanılmayan yerel değişken
  • unusedPrivate kullanılmayan özel üyesi bildirimi
  • Throw kullanılmayan beyan atılan istisna
  • uselessTypeCheck gereksiz dökme / instanceof işlemi
  • Cast varargs argümanı açık bir oyuncu kadrosuna ihtiyaç duyuyor
  • @SuppressWarnings içinde işlenmemiş uyarı jetonunu aldı

Sun JDK (1.6), daha kısa desteklenen uyarılar listesine sahiptir:

  • amortisman Amortismana tabi kalemlerin kullanımını kontrol edin.
  • işaretlenmemiş Java Dil Belirtimi tarafından zorunlu kılınan denetlenmeyen dönüşüm uyarıları için daha fazla ayrıntı verin.
  • serial Serileştirilebilir sınıflarda eksik serialVersionUID tanımları hakkında uyar.
  • nihayet normal olarak tamamlanamayan maddeler hakkında uyarın.
  • düşme Anahtar bloklarında düşme durumları olup olmadığını kontrol edin ve bulunanlar için bir uyarı mesajı verin.
  • yol Ortam yollarında (sınıfyolu gibi) var olmayan bir yol olup olmadığını kontrol edin.

Mac için en son kullanılabilir Javac (1.6.0_13) aşağıdaki desteklenen uyarılara sahiptir

  • herşey
  • oyuncular
  • karşı koyma
  • divzero
  • boş
  • kontrolsüz
  • suya düşmek
  • yol
  • seri
  • en sonunda
  • geçersiz kılmaları

Buradaki Eclipse listesi, SuppressWarning ek açıklamalarına değil derleyici bayraklarına bakar (bağladığınız dokümanın son bölümünü kontrol edin).
Ron Tuffin

3
Onlar ikisi de. Derleyici bayraklarını ayarlayarak derleyiciye ne tür uyarılar istediğinizi söylersiniz. Ek açıklamalar ile kodunuzdaki belirli yerlerde bu uyarıları engelleyebilirsiniz.
D. Wroblewski

Eclipse için listenin daha kısa olduğunu düşünüyorum. En son galileo belgelerine bakın, SupressWarnings için mevcut jetonların listesi burada açıktır: help.eclipse.org/galileo/index.jsp?topic=/…
Peter Štibraný

2
Eclipse 3.5 @SuppressWarnings ("raw") denedim ve çalışmıyor - "raw" bu ek açıklama için geçerli bir değer değil bir uyarı alıyorum.
Jesper

ben de. Ne yazık ki jsp desteğinin java desteği kadar boş değil.
stu

9

Benim için yeni bir favori @SuppressWarnings("WeakerAccess")olan IntelliJ'de, kullandığınızdan daha zayıf bir erişim değiştiriciniz olması gerektiğini düşündüğünde şikayet etmekten kaçınıyor. Testi desteklemek için bazı yöntemlere herkesin erişebilmesi gerekir ve @VisibleForTestingek açıklama uyarıları engellemez.

ETA: "Anonim", @MattCampbell'in bağlı olduğu sayfada şu inanılmaz faydalı notu yorumladı:

Bu listeyi tanımladığınız amaç için kullanmanıza gerek yoktur. İsterseniz IntelliJ bu SuppressWarnings'i sizin için otomatik olarak ekleyecektir. Bunu hatırladığım kadar çok yayın için yapabildi.

Uyarının bulunduğu konuma gidin ve Alt-Enter yazın (veya orada görüyorsanız, Denetimler listesinden seçin). Menü geldiğinde, uyarıyı göstererek ve sizin için düzeltmeyi teklif ettiğinde (örneğin, uyarı "Yöntem statik olabilir" ise "statik yap" IntellJ'nin sizin için düzeltme önerisidir), "enter" seçeneğini seçmek yerine, "İnceleme profili ayarını düzenle" gibi seçeneklere sahip alt menüye erişmek için sağ ok düğmesini kullanın. Bu listenin en altında "Sınıf için tüm denetimleri bastır", "Sınıf için bastır", "Yöntem için bastır" ve nadiren "İfadeyi bastır" gibi seçenekler bulunur. Muhtemelen bunlardan birinin listede en son hangisi göründüğünü istiyorsunuz. Bunlardan birini seçtiğinizde, söz konusu uyarıyı gizleyen kodunuza bir @SuppressWarnings ek açıklaması (veya bazı durumlarda yorum) eklenir. Hangi ek açıklamayı ekleyeceğinizi tahmin etmeniz gerekmez, çünkü IntelliJ seçtiğiniz uyarıya göre seçim yapar.


2

IntelliJ'de//noinspection otomatik olarak oluşturulabileceğini fark ettim

  • @SuppressWarninigsifadeden önce bir planınız olmadığından emin olun
  • Şimdi , uyarı seçiliyken Alt + Enter tuşlarına//noinspection basarak spesifik özelliği otomatik olarak oluşturabilir ve sonra için Gizle ... seçeneğini görmek için sağ ok tuşunu kullanabilirsiniz.

IntelliJ'den bir "anahtarın çok az vaka etiketi var" uyarısını bastırmak istediğimde burada sona erdi. IntelliJ'in @SuppressWarningdesteği için tam bir Liste bulamadım ama //noinspectionbenim için hile yaptım.


Bunun için @SuppressWarnings ("SwitchStatementWithTooFewBranches") ekleyebilirsiniz.
JPM

Ne yazık ki ALT + ENTER'a bastığınızda Supress for ... seçeneği her zaman mevcut değildir
flawyte

//noinspection SwitchStatementWithTooFewBranchesswitchişlerden önce de benim için.
Oliver Hausler

1

Ve bu, Android-Studio'ya özgü başka bir yerde bulamadığım bazı uyarılar bulduğum çok daha eksiksiz bir liste gibi görünüyor (örneğin SynchronizeOnNonFinalField)

https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html

Oh, şimdi SO'nun kuralları SO'nun kısıtlamalarıyla çelişiyor. Bir yandan, sadece bağlantıyı sağlamak yerine listeyi kopyalamam gerekiyor. Ancak diğer yandan, bu izin verilen maksimum karakter sayısını aşacaktır. Öyleyse sadece bağlantı kopmayacağını umalım.


1

JSL 1.7

Oracle belgelerinden bahsediyor:

  • unchecked: İşaretlenmeyen uyarılar "işaretlenmemiş" dizesiyle tanımlanır.
  • deprecation: Java Derleyicisi, bildirimi @Deprecated ek açıklamasına ek açıklama eklenmiş olarak kullanılan bir tür, yöntem, alan veya kurucu kullanılmadığında (yani geçersiz kılınmış, çağrılmış veya adıyla referans gösterilmişse) kullanımdan kaldırma uyarısı üretmelidir: [...] kullanımı, @SuppressWarnings ek açıklamasındaki ("kullanımdan kaldırma") uyarıyı bastırmak için ek açıklamalı bir varlık içindedir; veya

Daha sonra uygulamaların kendi ekleyebileceğini ve belgeleyebileceğini açıklar:

Derleyici satıcıları, bu ek açıklama türüyle birlikte destekledikleri uyarı adlarını belgelemelidir. Tedarikçilerin aynı isimlerin birden fazla derleyici üzerinde çalışmasını sağlamak için işbirliği yapmaları teşvik edilir.


1
uncheckedStandart tarafından onaylanan tek kişi olduğu doğru değildir ; Eğer alıntı birinden çok sonraki bölüm kullanımdan kaldırılması uyarıları "kullanım ek açıklama ile uyarı bastırmak için açıklamalı bir varlık içinde olduğunda üretilen verilmemesi gerektiğini belirtti @SuppressWarnings("deprecation")"
kbolino

1

Sadece şu adresteki IntelliJ baskılama parametrelerinin bir ana listesi olduğunu eklemek istiyorum: https://gist.github.com/vegaasen/157fbc6dce8545b7f12c

Oldukça kapsamlı görünüyor. Kısmi:

Warning Description - Warning Name

"Magic character" MagicCharacter 
"Magic number" MagicNumber 
'Comparator.compare()' method does not use parameter ComparatorMethodParameterNotUsed 
'Connection.prepare*()' call with non-constant string JDBCPrepareStatementWithNonConstantString 
'Iterator.hasNext()' which calls 'next()' IteratorHasNextCallsIteratorNext 
'Iterator.next()' which can't throw 'NoSuchElementException' IteratorNextCanNotThrowNoSuchElementException 
'Statement.execute()' call with non-constant string JDBCExecuteWithNonConstantString 
'String.equals("")' StringEqualsEmptyString 
'StringBuffer' may be 'StringBuilder' (JDK 5.0 only) StringBufferMayBeStringBuilder 
'StringBuffer.toString()' in concatenation StringBufferToStringInConcatenation 
'assert' statement AssertStatement 
'assertEquals()' between objects of inconvertible types AssertEqualsBetweenInconvertibleTypes 
'await()' not in loop AwaitNotInLoop 
'await()' without corresponding 'signal()' AwaitWithoutCorrespondingSignal 
'break' statement BreakStatement 
'break' statement with label BreakStatementWithLabel 
'catch' generic class CatchGenericClass 
'clone()' does not call 'super.clone()' CloneDoesntCallSuperClone

1

SonarLint kullanıyorsanız, yöntemin yukarısını deneyin veya tüm kalamar dizesini sınıflayın: @SuppressWarnings ("squid: S1172")

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.