Java 共変配列サブA
タイプでは、 が のサブタイプであるB
場合、 のサブタイプA[]
と見なされることを意味しB[]
ます。共変配列のサブタイピングは設計上の不適切な選択であり、代わりに多相配列が正しい設計上の選択であると読みました。しかし、ポリモーフィック配列とは正確には何を意味するのでしょうか?
1 に答える
0
@Bhesh Gurung がコメントで指摘したように、配列共分散は のようなジェネリック クラスとは何の関係もありませんList<T>
。配列共分散とは、 classB
が class を拡張する場合A
、 typeB[]
が に代入可能であることを意味しA[]
ます。
Arrays.equals(Object[], Object[])
彼らが Java でこれを行った理由は、Java にジェネリックを追加する前に、メソッドのようなものを元に戻すことができるようにするためでした。Object[]
基本的に、彼らは任意のタイプの配列を受け入れることができる を受け取るメソッドを望んでいました。実行時の型エラーにつながる可能性があるため、これは不適切な選択です。例えば:
Object[] objs = (Object[]) new Integer[1];
objs[0] = "Hello"; // Compiles, but throws runtime error
ポリモーフィック配列は、Scala 言語で配列がどのように機能するかに似ています。を宣言するのではなくnew Integer[10]
、次のようなことができますnew Array<Integer>(10)
。ジェネリック型の配列を初期化したり、ジェネリック型で配列を作成したりできるので、これが望ましいと思います。例: new List<String>[10]
.
于 2013-10-19T06:31:18.363 に答える