インスタンスとその実装についてかなり深刻な混乱があります。私はList<String>
がインタフェースであることを知っているが、私は、基準変数としてのタイプを使用することができ、私はまた、RHSが実際List
の実装であるArrayList
を返すことを知っているのでJAVA:インスタンスリファレンスとの混乱
List<String> lines = Files.readAllLines(Paths.get(fileAddress),
Charset.defaultCharset());
上記のコードが有効です。また、lines.getClass().getName()
はjava.util.ArrayList
を返します。
しかし、意外にも私は、
ArrayList<String> lines = Files.readAllLines(Paths.get(fileAddress),
Charset.defaultCharset());
私は、可能であることをどのように
Type mismatch: cannot convert from List<String> to ArrayList<String>
を、エラーを取得していますか?
'readAllLines'は' List 'を返すように定義されています。これは呼び出し側コードが依存しなければならないものです。 'ArrayList 'を実際に返すという事実は、呼び出し側に影響を与えずに変更できる実装の詳細です –
「RHSが実際にリストの実装であるArrayListを返すことも知っています。実装、または実行時の実際の時間を調べることによって? 'Files.readAllLines'の*宣言*は' List ' –
を返します。コンパイラは定義に基づいてコードをコンパイルします。どのような実装が行われているかを知るためにメソッドの内部を詮索することはありません。 (幸いにも。) –