teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

質問の主旨がはっきりしていないようなので、追記した。

2020/11/29 07:03

投稿

moriman
moriman

スコア615

title CHANGED
File without changes
body CHANGED
@@ -54,4 +54,25 @@
54
54
  上記のクラス階層だと、ListIterable<E>のメンバ(ListIteratorインスタンスで初期化されたiteratorプロパティ)をList<E>が継承することはできないですよね。
55
55
 
56
56
  どこか他の場所でList<E>クラスとListIterable<E>クラスの関係性を示すコードがあるのでしょうか?
57
- それともこのコードでList<E>クラスのインスタンスのiteratorプロパティは適切に初期化されるのでしょうか?
57
+ それともこのコードでList<E>クラスのインスタンスのiteratorプロパティは適切に初期化されるのでしょうか?
58
+
59
+ 2020/11/29/15:30追記
60
+ 質問の主旨なのですが、
61
+
62
+ iterable、iteratorなどの基本を学ぶ中で、
63
+
64
+ リストリテラルなどで生成したList<E>型のインスタンスがfor-inループでイテレートできる以上、List<E>インスタンス内のiteratorプロパティに有効なIterator<E>(あるいはそのサブクラス)のインスタンスがセットされているはずなので、それをソースコードで確認したい、
65
+
66
+ という考えが発生しました。
67
+ それを確認するためにソースコードのどこを見れば良いか、ということが質問の主旨です。
68
+ リストリテラルで生成されるリストがList<E>型のコンストラクタで生成されるとすると、
69
+
70
+ 結局List<E>クラスのコンストラクタが、(toast-uz様にお示し頂いた)Iterable.generate()コンストラクタを呼び出しているなら、
71
+ ListIterableのサブクラスが生成されるので、全てつながると思うのですが、
72
+ List<E>クラスのコンストラクタを見ると
73
+ ```ここに言語を入力
74
+ external factory List.filled(int length, E fill, {bool growable = false});
75
+ ```
76
+ のようにコンストラクタは全てexternal修飾子がついていて、ボディが記述されていないようです。
77
+ externalというのは、メソッド(コンストラクタ)のボディは別の場所で定義されている、ということらしいのですが、
78
+ その場所ってどこなのでしょうか?