57

JDK 1.7.0 を使用して OS X で Spring JDBC ソースをコンパイルすると、次の警告が表示されます。

warning: CachedRowSetImpl is internal proprietary API and may be removed in a future release

コンパイル中に警告メッセージを抑制するにはどうすればよいですか?

私はすでに Java の @SuppressWarning アノテーションを知っていて、使用しています。私が説明した警告を抑制するために、これを具体的に使用する方法を探しています。

私の質問は、具体的には、次のコード行です。

@SuppressWarnings("valuegoeshere")

「valuegoeshere」を何に置き換える必要がありますか?

編集:人々、警告につながるコードを避けるのが最善であることを私は知っています。そして通常、それが私のアプローチです。ただし、ここでは書き換えたくないサードパーティのコードをコンパイルしています。警告を抑制するために正しい注釈を追加して、実際に何かできる警告が埋もれないようにしたいだけです。

4

7 に答える 7

54

この特定の警告は抑制できません。少なくとも公式ではありません。

プロプライエタリ API に関する警告は、警告の原因となる API を使用してはならないことを意味します。Sun はそのような API をサポートしていないため、警告は抑制できません。

特に決定している場合は、公開されているシンボル ファイルではなく、javac -XDignore.symbol.fileSun の内部に対してプログラムをコンパイルする、非常に文書化されていないフラグを使用できます。この警告は生成されません。rt.jarct.symrt.jar

于 2012-12-13T14:48:39.360 に答える
25

Maven を使用している場合は、pom.xmlファイルに次を追加することに関心があるかもしれません。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <compilerArgument>-XDignore.symbol.file</compilerArgument>
    </configuration>
</plugin>
于 2013-10-21T20:04:57.403 に答える
8

実装ではなく、そのインターフェースCachedRowSetを参照してください。

于 2012-12-13T08:23:59.613 に答える
3

私は試した

@SuppressWarnings("all")

しかし、それはうまくいきませんでした。

そのため、一般的にはお勧めしない恐ろしい、恐ろしいクラッジに頼りましたが、この特定のケースでは、警告が消えました。リフレクションを使用して、com.sun.rowset.CachedRowSetImpl クラスの新しいインスタンスをインスタンス化しました。

この行を置き換えたため、警告が発生しました。

    return new CachedRowSetImpl();

このブロックで:

    try {
        final Class<?> aClass = Class.forName("com.sun.rowset.CachedRowSetImpl");
        return (CachedRowSet) aClass.newInstance();
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
        throw new RuntimeException(e);
    }

最初に他のオプションを検討せずに、独自のコードでこれを行わないでください。

于 2012-12-13T10:18:33.657 に答える
1

この回答が遅い収穫であり、問​​題が解決したことを認めます。しかし、私はあなたと同じ問題に行き詰まり、調査中にこの解決策を見つけました。

なぜ起こるのですか?

https://www.oracle.com/java/technologies/faq-sun-packages.html

この振る舞いは間違っていますか?

いいえ、これは ChachedRowSetImpl がパブリック インターフェイスに属していないことを示す警告であるため、互換性は保証されません。

回避策

次のコード スニペットは、 によって作成される を使用してオブジェクトCachedRowSetを作成します。RowSetFactoryRowSetProvider

RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet rowset = factory.createCachedRowSet();

これによりCachedRowSet、実装クラスからオブジェクトが作成されますcom.sun.rowset.CachedRowSetImpl。これは、次のステートメントと同等です。

CachedRowSet rowset = new com.sun.rowset.CachedRowSetImpl();

ただし、CachedRowSet参照実装は将来変更される可能性があるため、RowSetFactory からオブジェクトを作成することをお勧めします。

于 2020-04-16T16:25:29.033 に答える
0

javac オプションを試す

-Xlint:none

IDE からコンパイルする場合は、警告を無効にするオプションが必要です。

これにより、Java 言語仕様の一部ではないすべての警告が無効になります。したがって、たとえば「未チェック」の警告はブロックされません。

于 2012-12-13T08:24:09.317 に答える