• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:下記の様に、Employeeの(クラス)型でキャストした場合の、Emp)

EmployeeのVectorを使った書き方がよく分からない

このQ&Aのポイント
  • Employeeのクラス型でキャストした場合に、EmployeeのVectorを使った書き方が分からない
  • Employeeクラスの中で、Vector型のEmployeeや関数print()の書き方が分からない
  • 質問者は助言を求めている

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ちょろっと #2 にも書いたんだけど, それだけのためになぜわざわざクラスを作ったりしなきゃならないのか, 全く理解できない. 素直に Vector.elements なり Vector.iterator なりを使えばいいだけのこと. もっといえば, それくらいなら Enumeration や Iterator を使うまでもない. ふつうに for で書けばいいだけ.

tmiyoshi
質問者

お礼

クラスTraversableVectorのコンストラクタに、 public TraversableVector() { String obj1 = new String("佐藤"); String obj2 = new String("鈴木"); String obj3 = new String("三木"); this.add(obj1); this.add(obj2); this.add(obj3); } を記述することで、やりたいことができるようになりました。 ありがとうございました。 ただ、御指摘いただいた、クラスTraversableVectorの public Enumeration createEnumeration() { return new VectorEnumeration(this); } のthisポインタは「クラス VectorEnumeration のインスタンス」ではなく、 「クラス TraversableVectorのインスタンス」です。 ここは、クラスVectorEnumerationがクラスTraversableVectorを参照する形になります。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

なんとなくやりたいことがわかったような気がしないでもないんだけど, やっぱり何かを混乱しているように見えます. まず「インスタンス化しているクラスVectorEnumerationにthisポインタで渡しているVectorのオブジェクト」ですが, ここで渡す this は (確かに「Vector のインスタンス」といえなくもないけど) クラス VectorEnumeration のインスタンスです. そのあとの「たとえば~Employeeをthisポインタとして渡したい」は意味不明. createEnumeration を VectorEnumeration のインスタンスメソッドにしているというのは, 当然「そのメソッドを起動したまさにそのインスタンスに対する Enumeration を返す」ためです. だから, ここではこの書き方しか考えられません. そして,「インスタンス Employee を this として渡す」ためには, インスタンス Employee に対してインスタンスメソッドを起動するしかありません. でとりあえず「TraversableVector に対して Vector のインスタンスを引数に持つコンストラクタを作ってラップすればいいんじゃないか」と思ったりはしますが, 正直なところ なんでこんなことをしなければならないのか想像もつかない というのが本音. 「標準でついているものの劣化コピー」をわざわざ作る理由がわからん.

tmiyoshi
質問者

補足

すいません。 VectorEnumeration(this)のthisポインタは間違えて解釈していました。 やりたいことは、たとえば、Vector型のEmployeeを作って、そこに従業員の名前を何人か 入れておいて、その要素にTOPのMain()の中でEnumerationの機能を使って、while()文の 中で各要素にアクセスして、それを表示させたいだけなのです。 そのためには、このクラスの構造上で、Vector型のEmployeeをどこにどのように書いたらよいのかがよく分からないということです。 簡単に教えていただけないでしょうか? よろしくお願い致します。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

正直にいって, 文章が混乱しているので何を言いたいのかがさっぱりわかりません. 「Employeeクラスの中で、Vector型のEmployeeや関数print()をどうやって書いたらいいのか分かりかねています。」 と書いてますけど, 「Employee クラスの中に『Vector 型の Employee』がある」んでしょうか? もしそうだとしたら (そして「Vector 型の Employee」を素朴に解釈するなら), おそらくクラスの設計がすでに間違っています. また, 「関数 print() をどうやって書いたらいいのか」といわれても, 「どういう表示を求めているのか」が分からない以上「あなたが期待する出力が得られるように」としか言いようがありません. ・クラス Employee の中身 ・print で「どのように表示したい」のか がわかれば, 多少は答えられるかもしれませんが....

tmiyoshi
質問者

補足

Java版のIteratorの使い方で、ちょっと混乱してしまっているので、順番に質問させてください。 下記のコードで、クラスTraversableVectorの中の関数createEnumeration()で、インスタンス化しているクラスVectorEnumerationにthisポインタで渡しているVectorのオブジェクトですが、たとえば、   Vector Employee = new Vector();   String obj1 = new String("佐藤");   Employee.add(obj1); として、Employeeをthisポインタとして渡したいのですが、この場合、どう書けばいいのでしょうか? //ここから import java.util.*; public class Main { public static void main(String[] args) {   Traversable employees;   employees = new TraversableVector(); java.util.Enumeration e = employees.createEnumeration(); while(e.hasMoreElements()) { String emp = (String)e.nextElement(); System.out.println(emp); } } } class NullEnumeration implements java.util.Enumeration { public boolean hasMoreElements() { return false; } public Object nextElement() throws IndexOutOfBoundsException { throw new IndexOutOfBoundsException(); } } interface Traversable { public Enumeration createEnumeration(); } class TraversableVector extends java.util.Vector implements Traversable { public TraversableVector(int initialCapacity,int capacityIncrement) { super(initialCapacity, capacityIncrement); } public TraversableVector(int initialCapacity) { super(initialCapacity); } public TraversableVector() { Vector Employee = new Vector(); String obj1 = new String("三好"); Employee.add(obj1); } public Enumeration createEnumeration() { return new VectorEnumeration(this); } } class VectorEnumeration implements Enumeration { public VectorEnumeration(java.util.Vector v) { _vector = v; _current = -1; } public Object nextElement() throws IndexOutOfBoundsException { if (!hasMoreElements()) throw new IndexOutOfBoundsException(); return _vector.elementAt(++_current); } public boolean hasMoreElements() { return _vector.size() > _current+1; } private int _current; private java.util.Vector _vector; } //ここまで よろしくお願い致します。

関連するQ&A