私はStackOverflowのコメント付きコードのこのセクションに出くわしました。ランタイム例外がスローされます。 2番目の部分(コメントされていないセクション)が動作します。両方のメソッドがオブジェクトの配列を返すので、私は2つの違いを見つけることができません。たぶん私は基本的な理解を欠いているかもしれません。手伝ってくれませんか?文字列の配列対オブジェクトの配列java
答えて
キャストに問題があると思います。あなたが一部を使用する場合、コンパイラが実際に見ているものを
static <Object> Object[] display(Object... args)
が
static <Object> Object[] display(Object[]... args)
あり、それはさらにこれがであってはならない値を許可する可能性がある。この
static <Object> Object[] display(List[]... args)
に変換しますそこに
あなたは文字列のオブジェクト配列を作成し、それにintを追加しようとすることができます。これは異なるタイプの問題を引き起こすでしょう。ジェネリックオブジェクトを使わずに再加工したいかもしれません。
@SafeVarargsタグを使用することもできます。
コンパイラは、 'Object ... 'を見るときに' Object [] 'を見て、' List'は関係しません。 – Kayaman
これは興味深い状況です。最初の例では、Javaはオブジェクト配列から文字列配列へのキャストについて不平を言っています。
java.lang.ClassCastException:[Ljava.lang.Object; [Ljava.lang.String;にキャストすることはできません。
2番目のケースでは、問題なく処理できます。問題はタイプ消去のようです。 asArray
が返されると、そのパラメータに基づいて型付けされた配列が返されます。その情報は、Object[]
と単純になるarrayOfTwo
のコンテキスト内で消去され、内容が文字列であることはもはや利用できません。
型消去および非修飾型、およびvarargsへの影響については、this postをご覧ください。これは「可能ヒープ汚染」について、コードを生成する警告にいくつかのコンテキストを提供しない。
Safevarargs.java:11:警告:[未確認]可能ヒープ汚染パラメータ化された可変引数型オブジェクトから
静的オブジェクトを[ 】表示(オブジェクト...引数){オブジェクトが型変数である
^:ドキュメントから
オブジェクトがjava.lang.Objectのメソッドディスプレイ内で宣言延び(オブジェクト...)
:
ヒープ汚染は、パラメータ化された型の変数が、そのパラメータ化された型ではないオブジェクトを参照する場合に発生します。
この問題を説明するには、Javaの一般的な仕組みを知る必要があります。コンパイラは、コンパイルのプロセス中にジェネリック型情報を内部的に使用し、ソースを処理する際に型関連のエラーを生成します。次に、検証が完了すると、コンパイラはジェネリック型の参照をそれぞれの型の消去で置き換えて、型消去されたバイトコードを生成します。
2番目の例では、コンパイル時にstringにコンパイルされます。最初の例では、asArrayは別の汎用メソッドによって呼び出されるため、コンパイル時にObjectにコンパイルされます。その結果、実行時にObject []をString []にキャストすることができず、クラスキャスト例外がスローされます。これがあなたを助けることを願って
- 1. Javaの文字列と文字配列
- 2. 文字列型.NET対文字配列
- 3. オブジェクトを文字列配列
- 4. Java文字列を配列
- 5. C - 文字列対配列の条件
- 6. オブジェクトの配列対リストの配列
- 7. 文字配列の配列
- 8. オブジェクトの文字列が別の配列
- 9. 文字列の配列からオブジェクトの配列をフィルタリング
- 10. Javaのint配列と文字列配列の切り替え
- 11. 配列文字列オブジェクトObjective-Cの
- 12. オブジェクト配列へのJQuery文字列
- 13. オブジェクト配列の文字列配列サブクラスですか?
- 14. オブジェクト配列をPowerShellの文字列配列に変換する
- 15. Javaの:文字列配列整数へ
- 16. Java配列と文字列の比較
- 17. 配列と文字列のjavaジェネリック
- 18. Javaのキャストオブジェクト/文字列配列
- 19. 2文字列の配列を持つ配列Java
- 20. 文字列配列の配列を並べ替えるJava
- 21. 配列結合対文字列Concat
- 22. Get_post_meta配列への文字列配列
- 23. 文字列対文字配列対文字列作成者(効率性能)
- 24. Javaのオブジェクトの配列対C++
- 25. 文字列をJavaの文字列配列に変換する
- 26. Java - 文字列配列の文字列を検索する
- 27. 文字列配列をtalend javaコードのオブジェクトに変換
- 28. オブジェクト値を文字列配列
- 29. Java文字配列エラー
- 30. オブジェクトのJava配列
例外は何ですか? – Jens
ジェネリック型変数に 'Object'のような名前を使用することは非常に悪いことです。 –
不必要な繰り返しがあります。 'asArray'は間違っているが' display 'ではない方法はない。 – ChiefTwoPencils