下記の様に、Employeeの(クラス)型でキャストした場合の、EmployeeのVectorを使った書き方がよく分かりません。Employeeは複数の従業員の名前をVector形式で表現したものになります。Employeeクラスの中で、Vector型のEmployeeや関数print()をどうやって書いたらいいのか分かりかねています。御教示願えたらと思っています。
//ここから
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Traversable employees;
employees = new TraversableVector();
// ...
java.util.Enumeration e = employees.createEnumeration();
while(e.hasMoreElements()) {
Employee emp = (Employee)e.nextElement();
emp.print();
}
}
}
//ここまで
よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
ちょろっと #2 にも書いたんだけど, それだけのためになぜわざわざクラスを作ったりしなきゃならないのか, 全く理解できない.
素直に Vector.elements なり Vector.iterator なりを使えばいいだけのこと.
もっといえば, それくらいなら Enumeration や Iterator を使うまでもない. ふつうに for で書けばいいだけ.
クラス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を参照する形になります。
No.2
- 回答日時:
なんとなくやりたいことがわかったような気がしないでもないんだけど, やっぱり何かを混乱しているように見えます.
まず「インスタンス化しているクラスVectorEnumerationにthisポインタで渡しているVectorのオブジェクト」ですが, ここで渡す this は (確かに「Vector のインスタンス」といえなくもないけど) クラス VectorEnumeration のインスタンスです.
そのあとの「たとえば~Employeeをthisポインタとして渡したい」は意味不明. createEnumeration を VectorEnumeration のインスタンスメソッドにしているというのは, 当然「そのメソッドを起動したまさにそのインスタンスに対する Enumeration を返す」ためです. だから, ここではこの書き方しか考えられません. そして,「インスタンス Employee を this として渡す」ためには, インスタンス Employee に対してインスタンスメソッドを起動するしかありません.
でとりあえず「TraversableVector に対して Vector のインスタンスを引数に持つコンストラクタを作ってラップすればいいんじゃないか」と思ったりはしますが, 正直なところ
なんでこんなことをしなければならないのか想像もつかない
というのが本音. 「標準でついているものの劣化コピー」をわざわざ作る理由がわからん.
この回答への補足
すいません。
VectorEnumeration(this)のthisポインタは間違えて解釈していました。
やりたいことは、たとえば、Vector型のEmployeeを作って、そこに従業員の名前を何人か
入れておいて、その要素にTOPのMain()の中でEnumerationの機能を使って、while()文の
中で各要素にアクセスして、それを表示させたいだけなのです。
そのためには、このクラスの構造上で、Vector型のEmployeeをどこにどのように書いたらよいのかがよく分からないということです。
簡単に教えていただけないでしょうか?
よろしくお願い致します。
No.1
- 回答日時:
正直にいって, 文章が混乱しているので何を言いたいのかがさっぱりわかりません.
「Employeeクラスの中で、Vector型のEmployeeや関数print()をどうやって書いたらいいのか分かりかねています。」
と書いてますけど, 「Employee クラスの中に『Vector 型の Employee』がある」んでしょうか? もしそうだとしたら (そして「Vector 型の Employee」を素朴に解釈するなら), おそらくクラスの設計がすでに間違っています.
また, 「関数 print() をどうやって書いたらいいのか」といわれても, 「どういう表示を求めているのか」が分からない以上「あなたが期待する出力が得られるように」としか言いようがありません.
・クラス Employee の中身
・print で「どのように表示したい」のか
がわかれば, 多少は答えられるかもしれませんが....
この回答への補足
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- C言語・C++・C# public class Emplo : IComparable<Emplo>の<Emplo>の意味 2 2023/04/23 23:33
- 英語 総称的意味の「the+過去分詞」が無冠詞複数形で置き換えることができない理由について 5 2022/08/04 10:14
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- TOEFL・TOEIC・英語検定 公式TOEIC問題集7に記載のある文章で質問があります。 どなたかお教えください。 文章は下記となり 1 2022/10/27 06:07
- 英語 英語ニュース記事について 4 2022/06/05 05:57
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
変数名の付け方
-
VB.NET getとsetの概念がわかり...
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
抽象クラスのインスタンス生成...
-
オブジェクト参照がオブジェク...
-
他のファイルの変数参照
-
クラス型がインスタンス化され...
-
エクセル(複数インスタンス)...
-
C#において、同じインスタンス...
-
VB6.0のクラスで、自分自身のイ...
-
マルチスレッドでのインスタン...
-
文字列を日付に変換でParseExce...
-
String型もしくはint型をIntege...
-
VC#での24ビットbmp形式での保...
-
newしないインスタンス?実体化...
-
生成したインスタンスを削除す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
おすすめ情報