下位互換性をサポートするために、どのような Java 設計が明示的に行われていますか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/961986

  •  12-09-2019
  •  | 
  •  

質問

以来 この質問 終了までに 4 票に戻ったので、コミュニティがより好意的に見てくれることを願って、より限定的な質問をもう一度質問しようとしています。

Java における特定の設計上の決定がそのように文書化されているのは、それが好ましい設計上の決定だったからではなく、下位互換性をサポートするために必要だったからです。

明らかなケースはジェネリックで、実行時に型パラメータを検出できません。(したがって、次のことはできません:

 public void addEmptyMember(List<?> someList) {
      if (someList instanceof List<String>) {
            ((List<String>) someList).add("");
      }
 }

言語設計と標準 API には、他にどのような例がありますか?

役に立ちましたか?

解決

この質問は、単一の正しい答えを持っていないので、それはあなたの他の質問よりも良くやっう場合、私はわからない。

の下位互換性の名の下に妥協をした私は(すでに述べた一般的な消去に加えて)を考えることができる3つの機能は、ループ構文、可変引数、およびオートボクシングのための新しいました。

ループ構文のための新しい、おそらくfor (item in List)を読んでいるはずですが、それは予約語にinを作る必要だろう。これは、多数の下位互換性の問題ではなく、System.inの名前が変更されなければならないという事実であること少なくともそのうちの原因となります。

可変引数の両方をオートボクシングは、曖昧さの可能性を追加しました。あなたがObject...を受け取るメソッドへのオブジェクトの配列を渡す場合たとえば、それは、配列が可変引数配列として、あるいは可変引数配列の要素として渡す必要があります意味ですか?オーバーロードがある場合、これはさらに複雑になります。オートボクシングは、オーバーロードと同様の曖昧さの問題を抱えています。 (:なしオートボクシング、そしてObject...Object[]として扱われるすなわち)、これらの問題の両方を解決するには、それの解決方法は、それらが第1のプリ1.5ルールで解決されることを呼び出すルール作ることでした。メソッド呼び出しは、事前に1.5ルールで解決できない場合にのみ考慮さ新しい1.5ルールです。

他のヒント

標準ライブラリにはサンプルがたくさんあります

  • java.awt.Color には、大文字と小文字の名前を持つ同じ定数があります。
  • java.util.Calendar の導入により、java.util.Date のすべてのメソッドが非推奨になりました - なんて混乱したことでしょう。
  • java.util.Enumeration は java.util.Iterator に置き換えられるところでまだ使用されています
  • Vector を引数として受け入れる Swing のクラスですが、java.util.Collection のサポートが追加されている可能性があります。

もう一つは、今では複数のバージョンで廃止されているすべてのクラスとメソッドになりますが、ちょうど離れて行くことはありません。最も注目すべきは廃止され、さまざまなスレッドの方法、です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top