Javaの.NETのNotImplementedExceptionのようなものはありますか?


回答:


516

コモンズラングはそれを持っています。または、をスローすることもできますUnsupportedOperationException


26
NotImplementedExceptionがCommons Lang 3.0から削除されたようです。
Michael Younkin、2011

13
UnsupportedOperationExceptionはコレクションフレームワークの一部であるため、コレクションのコンテキストで使用する場合にのみ使用する必要があると思います。それ以外の場合は、RuntimeExceptionを使用する必要があります。docs.oracle.com/javase/7/docs/technotes/guides/collections/...
L.Butz

9
@LeonardButzそれはjava.lang.Objectから来る:docs.oracle.com/javase/1.5.0/docs/api/java/lang/...
ラヴィWallau

5
@RaviWallau私はこれを見ました:docs.oracle.com/javase/7/docs/api/java/lang/…このクラスはJava Collection Frameworkのメンバーであるということです。
L.Butz

3
Commons Lang 3.2で追加されました:commons.apache.org/proper/commons-lang/javadocs/api-3.2
qwertzguy

289

java.lang.UnsupportedOperationExceptionはあなたが探しているものだと思います。


28
まったく違うものだと思います。NIEはまた、まだ実装されていない可能性があると伝えており、UOEはそれは決して実現しないと言っています...
Dykam

5
@Dykam、それではNotImplementedYetExceptionではないでしょうか?
Yishai

106
@Dykam:new UnsupportedOperationException("Not implemented yet")-幸せですか?
Michael Borgwardt、

3
それがもっと悪いという意味ではなく、別のユースケースがあっただけです。
Dykam 2010

6
新しいUnsupportedOperationException( "まだ実装されていません")は素晴らしいアイデアです!:)なんらかの理由でlang3ではNotImplementedExceptionがないので、これは素晴らしいソリューションです
ufk

55

あなたはそれを自分で行うことができます(それが私がしたことです)-例外処理に煩わされないように、単にRuntimeExceptionを拡張すると、クラスは次のようになります:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

メッセージを受け取るように拡張することもできますが、この方法を使用する場合(つまり、まだ実装する必要があることを思い出させるため)、通常は追加のメッセージは必要ありません。

私はあえて言うと、私はシステムを開発している最中にこの方法のみを使用しているため、どの方法がまだ適切に実装されていないのかを見逃さないようにしています:)


3
このソリューションは、特別なエラーハンドラーを簡単に作成でき、NotImplementedExceptionコンストラクターへのすべての参照を見つけることで簡単に検索でき、数行のコードなので、このソリューションが最も気に入っています。ただし、独自のファイルを使用して新しいクラスを宣言する必要があるので、少し不便です。
D Coetzee

1
同意する。これはUnsupportedOperationException私の意見ではの使用よりも優れています。さて、もしJavaだけが例外の共通ライブラリにこれを追加するなら!
2013

12

すでに述べたように、JDKには密接な一致はありません。しかし、私のチームはそのような例外を利用することもあります。UnsupportedOperationException他の回答で提案されているように使用することもできますが、推奨されないコンストラクターを持つベースライブラリのカスタム例外クラスを使用します。

public class NotYetImplementedException extends RuntimeException
{
    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException()
    {
    }

    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException(String message)
    {
        super(message);
    }
}

このアプローチには次の利点があります。

  1. 読者が見たときNotYetImplementedException、彼らは一方で、実装が予定されていたし、どちらか忘れたか、まだ進行中であることを知っているUnsupportedOperationException(と一直線に述べているコレクション契約何かが実装されないことを)。そのため、クラス名に「まだ」という単語が含まれています。また、IDEは呼び出しサイトを簡単にリストできます。
  2. 各呼び出しサイトでの非推奨警告により、IDEおよび静的コード分析ツールは、まだ何かを実装する必要がある場所を通知できます。(この非推奨の使用は、一部の人にとっては悪いと感じるかもしれませんが、実際には非推奨は削除の発表に限定されていません。)
  3. コンストラクタは非推奨であり、クラスではありません。この方法では、実装が必要なメソッドの内部ではなく、非推奨の警告のみが表示されますimport(ただし、JDK 9で修正されました)。

8

いいえ、ありません。有効な使用法がほとんどないため、おそらく存在しません。使う前によく考えます。また、自分で作成するのは確かに簡単です。

それが.NETでさえある理由については、この議論を参照しください。

UnsupportedOperationException操作が実装されていないだけでなく、サポートもされていないということはありませんが、近いと思います。これは、有効な実装が不可能であることを意味する可能性があります。操作がサポートされないのはなぜですか?それもそこにあるべきですか?インターフェースの分離またはリスコフの置換の問題でしょうか?

それが進行中の作業である場合、私は行きますがToBeImplementedException、具体的なメソッドを定義するのに気づかず、それを長い間そのままにしておくと、それが実稼働になり、そのような例外が必要になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.