質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

8770閲覧

「非推奨」のメソッドがなくならないのはなぜ?

swordone

総合スコア20651

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

2グッド

3クリップ

投稿2016/02/27 15:44

Javaの標準ライブラリに含まれるクラスには便利なメソッドが多数存在しますが、「非推奨」のメソッドも多数存在します。
非推奨になってまだ日が浅いものなら、新メソッドへの完全移行までの猶予として非推奨メソッドが残されるのは理解できます。
しかし、java.util.Dateクラスのほとんどのメソッド・コンストラクタはJDK1.1の段階で非推奨になっています。WikipediaによればJDK1.1のリリースは1997年2月19日、つまり19年も前です。
なぜこのようなメソッドが今現在も存在し、「非推奨」メソッドとしてドキュメントにも残り続けているのでしょう?

ikuwow, argius👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Javaは極めて保守的な言語です。また、1.0以降、一度もメジャーバージョンが上がったことはありません※。新しいマイナーバージョンが出た場合でも、なるべく過去のバージョンと互換性を残すようにしています。そのため、余程の理由がない限り既にあるメソッドを削除することはありません。
※ 1.2からJava 2と呼んだり名称自体は二転三転していますが、ずっと内部バージョンは1.xのままです。

「非推奨」をいつ「廃止」にするかは言語開発の戦略によって異なります。「非推奨」は警告が表示されるぐらいで、過去に作ったプログラムも動かすことができますが、「廃止」ではエラーとなり、必ず修正が必要になります。そのため、どのような言語でもかなり慎重に行われています。「廃止」されるタイミングはだいたい次の通りです。

  • 大きな非互換が許容されるメジャーバージョンアップ時に「廃止」されるもの
    • 多くのプログラムで既に使用されている機能
    • 内部実装や言語仕様の変更に伴い、実装が不可能または無意味になった機能
  • 小さな非互換しか許容されないマイナーバージョンアップ時に「廃止」されるもの
    • 使用者が極めて少なく、影響が軽微だと開発者が思い込んでいる機能
    • セキュリティ上、極めて危険性が高い機能
  • 本来非互換が許容されないパッチバージョンアップ時に「廃止」されるもの
    • バグ修正の影響で実装が不可能になった機能(そもそも、存在することがバグだったという話)

投稿2016/02/27 23:09

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/02/28 02:52

つまりメジャーバージョンが変わらないうちは、メソッドが「増える」ことは許容できても、「減る」ことは許容されにくいということでしょうか。 ただ、現状、無条件でNoSuchMethodErrorをスローするThread.destroy()メソッドのようなものまで非推奨で残しておく必要があるのでしょうか?
raccy

2016/02/28 05:11

Java開発者達の戦略としてどうしたかったのかははっきりとは言えませんが、とりあえずコンパイルまではできるから互換性が少しは保たれている、としたかったのかも知れません。
swordone

2016/02/28 09:53

ありがとうございました。大変参考になりました。
guest

0

こちらが参考になるかな、と。
非推奨ながら使われているから互換性のために消せないと言う感じでしょうか。

http://www.coppermine.jp/docs/programming/2011/12/java-util-date.html

投稿2016/02/27 22:35

yamato_hikawa

総合スコア2092

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問