Java'da kullanımdan kaldırılan içe aktarma uyarısını bastır


112

Java'da, kullanımdan kaldırılmış bir sınıfı içe aktarırsanız:

import SomeDeprecatedClass;

Bu uyarıyı alırsınız: The type SomeDeprecatedClass is deprecated

Bu uyarıyı bastırmanın bir yolu var mı?


4
Evet bu ideal olurdu, ancak bu durumda Hadoop için API'sinin yakın zamanda kullanımdan kaldırılan bir bölümünü kullanan bir kitaplık kullanıyorum, bu nedenle bu kitaplığı kullanmak istersem gerçekten bir seçeneğim yok. Üstelik bu sadece bir okul projesi içindir, sürdürülmesi gereken hiçbir şey değildir.
Ed Mazur

Yanıtlar:


129

Bu ek açıklamayı sınıfınızda veya yönteminizde kullanın:

@SuppressWarnings( "deprecation" )

29
Bu ithalatta çalışıyor mu? Bu ek açıklamayı yöntemlerde ve benzerlerinde kullandım, ancak ithalatlarla tanınmıyor gibi görünüyor.
Ed Mazur

2
Notu sınıf düzeyinde kullanmak ithalatı da kapsamalıdır. Bunu benim için en azından Eclipse'de (Rational Application Developer) yapıyor, ancak komut satırı derlemesi sırasında emin değilim.
craigforster

20
Komut satırı "javac" veya ant'ın <javac> görevi ile çalışmıyor gibi görünüyor. -Xlint: -deprecation bayrağı da yoktur. Bir javac böceği gibi görünüyor.
Archie

1
Kullanımdan kaldırma statik bir alanın parçası ve yerel bir SuppressWarnings ise çalışmıyor. Tam nitelikli sınıf adı burada daha iyi bir yaklaşım gibi görünüyor.
mheinzerling

16
Soru "import" ifadesiyle ilgili olduğundan ve düzeltme yalnızca Eclipse / Intellij için çalıştığı için (yorumlara göre öyle görünüyor) yanıt en üstte olmamalıdır, ancak gerçekliğin nihai kaynağı javac'tır. çalışmıyor. Bu cevap gerçekten soruyu cevaplıyor: stackoverflow.com/a/20909204/2032701
Ruslan

179

Uyarı önlemek için: do not sınıfını içe

bunun yerine tam nitelikli sınıf adını kullanın

ve mümkün olduğunca az yerde kullanın.


15
+1 Bu kabul edilen cevap olmalıdır. Tüm sınıftaki itirazları bastırmama avantajına sahiptir.
k_g

11
Bu daha iyi cevap, @SuppressWarningssınıf düzeyinde ithalatı kapsamıyor
Alex

7
Bu, nihayet düzeltildiği Java 9'a kadar en iyi yanıt: bugs.openjdk.java.net/browse/JDK-8032211
Christopher

14

Bir bilgisayar korsanlığı olarak içeri aktarmayı yapamaz ve kodun içindeki tam nitelikli adı kullanamazsınız.

Ayrıca javac -Xlint: -deprecation'ı da deneyebilirsiniz, bunun çözülüp çözülmeyeceğinden emin değilsiniz.


9

Bunu, içe aktarmayı şu şekilde değiştirerek çözdüm:

import package.*

daha sonra kullanımdan kaldırılan sınıfları kullanan yönteme@SuppressWarnings("deprecation")


Tüm paketten her şeyi içe aktarmayın. Performansı etkileyecek. Gereksiz derleyici tüm sınıfları yükleyecek ciddi performans sorunlarına neden olacaktır. İçe aktarma işleminizde kullanılmayan sınıfların bulunmadığından daima yararlanın.
Arundev

1
Burada örnek olarak bir ansiklopedi kullanıyorum (evet kendimle çıktım) - bir Orangutan hakkında bilgi arıyorsanız, sadece 'O' kitabını mı alıyorsunuz yoksa tüm kitapları mı alıyorsunuz?
Ascalonian

@Arundev, açık olmak gerekirse, derlemenin tamamlanmasının daha uzun sürebileceğini söylüyorsunuz, ancak çalışma zamanında bunun yürütme performansı üzerinde herhangi bir etkisi olmayacak, değil mi?
Paulo

@Paulo - söylemeye çalıştığım şey bu, kullanılmasa bile içe aktarılan sınıfların kullanılabilirliğini kontrol edecek. Öyleyse, çok fazla kullanılmamış ithalatınız varsa, bunu kaldırmak her zaman daha iyidir.
Arundev

7

Kullanımdan kaldırılmış bir yöntemle (java.sql.ResultSet içindeki getUnicodeStream (String columnLabel) gibi) bir arayüzü geçersiz kıldığınızı / uyguladığınızı varsayalım, o zaman sadece @SuppressWarnings ("kullanımdan kaldırma") ek açıklamasını kullanarak kullanımdan kaldırma uyarılarından kurtulamayacaksınız , aynı yeni yönteme @Deprecated ek açıklama ile açıklama eklemediğiniz sürece. Bu mantıklıdır, çünkü aksi takdirde sadece arayüz açıklamasını geçersiz kılarak bir yöntemi "geri döndürebilirsiniz".


Bu "@SuppressWarnings" ve "@Deprecated" kombinasyonu, kendi yönteminiz içinde kullanımdan kaldırılmış yöntemleri çağırmak için de çalışır.
Swav

1
Bu açıklamayı çok uzun zamandır arıyordum. Teşekkür ederim!
Jabari Dash

2

kullanabilirsiniz:

javac FileName.java -Xlint: -deprecation

Ancak bu, size uyarılar verecek ve ayrıca kodun kullanımdan kaldırmaya veya kullanımdan kaldırılmış API'yi kullanmaya neden olan kısmını size söyleyecektir. Artık kodunuzu bu uyarılarla çalıştırabilir veya kodda uygun değişiklikleri yapabilirsiniz.

Benim durumumda kullanıyordum, someListItem.addItem("red color")oysa derleyici kullanmamı istiyordu someListItem.add("red color");.

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.