2012-04-05 7 views
1

私はクラスを保持するためにベクトルを使用しようとしています。これらのクラスは別のクラスのメソッドを継承し、独自のメソッドも持っています。私が問題を抱えているのは、オブジェクト内のクラスからメソッドを呼び出すために、オブジェクト付きのベクトルを使用することです。生成iはオブジェクト内の生徒のクラスで作成したカスタムメソッドであることとJavaベクトル<object>クラスメソッドアクセス

public static void vSort(Vector<Object> vector) { 
vector[0].generate(); 
} 

:私はそれのようなものだろうと思いました。

より良い例

public class Method { 
protected String name; 

public void method() { 
// some code 
} 
} 
public class Student extends Method { 
protected String last; 

public void setUp() { 
// some code 
} 
} 
public class Main { 
public static void main(String[] args) 
{ 
Vector<Object> vector = new Vector<Object>(); 
Student stu = new Student(); // pretend this generates something 

vector.add(stu); 

} 

私はに実行しています問題は、法に構築し、学生のような多くのクラスがあります。私がうまくいけないObjectを使用していますが、私はMethodクラス内のコードにアクセスする必要があります。

+0

ArrayList がより一般的に使用され、やや効率が良いと言われています。基本的に同じように動作します。 – barsju

+0

@barsju少し効率的だとは言われていません。 'Vector'は同期しています。 – Jeffrey

答えて

3

Javaに演算子オーバーロードがありません。だから、構文は次のとおりです。

vector.get(0).generate(); 

しかし、あなたはVector<Object>を持っているので、これは、あなたのケースでは全く動作しません、とObjectgenerateメソッドを持っていません。

[]接線注:vectorは事実上廃止されました。代わりにArrayListを使用してください。]

2

vector.get(0)を使用してオブジェクトを取得する必要があります。

また、Objectgenerate()を宣言していませんので、キャストするかオブジェクトをタイプとしてキャストまたは指定する必要があります。

0

Vector<Object>がある場合、すべての取得メソッドはObjectを返すので、明示的にダウンキャストしない限り、サブクラスメソッドを呼び出すことはできません。 Vector<YourClass>を代わりに使用する必要があります。その結果、ベクトルから抜け出す参照はタイプYourClassであり、それらをダウンキャストする必要はありません。

関連する問題