2016-08-10 1 views
-2

このようなArrayListから継承するクラスのコレクションを参照するには、どのようにTHISキーワードを使用できますか?私は設計時にエラーが発生し、IDEは自分のコードをコンパイルできません。これをコレクションクラス内で使用する方法

public class Company{ 

    private EmployeeCollection employees; 

    public Company(){ 
     this.employees = new EmployeeCollection(); 
     this.employees.add(new Employee()); 
     this.employees.add(new Employee()); 
     this.employees.add(new Employee()); 
     this.employees.add(new Employee()); 
     this.employees.add(new Employee()); 
    } 

    public void MyMethod(){ 
     Employee fourthEmployee = employees.getFourth(); 
    } 
} 


public class EmployeeCollection extends ArrayList<Employee>{ 

    public Employee getFourth(){ 
     return this[3]; //<-- Error 
    } 

    public Employe getEmployee(int id){ 
     for(int i = 0; i< this.size(); i++){ //<-- Error 
      if(id == this[i].id){ //<-- Error 
      return this[i]; //<-- Error 
      } 
     } 
    } 

} 

通常はC#で、私はあなたがthisキーワードを使用することができ、この

public object test(int id) 
    { 
     for (int i = 0; i < this.Count; i++) 
     { 
      if (this[i].ID == id) 
      { 
       return this[i]; 
      } 
     } 
     return null; 
    } 
+0

リストは配列ではないので、配列の構文は機能しません。代わりに 'this.get(3);'を使うことができます。 – JonK

+0

ところで、 'this.size()'には何のエラーもありません。 – SomeDude

答えて

4

ような何かを行うことができますが、問題は、あなたがされていない、その上に配列アクセス構文を使用しているということですねJavaで有効です。それをgetメソッドへの呼び出しで置き換えます。

this.get(i) 
1

ArrayListのバッキングObject[]はプライベートですので、あなたはそれを継承することはできません。可能であれば、elementData[x]のように参照してください。

代わりにthis.get(x)を呼び出すだけで、配列から要素を取得できます。

ただし、デザインの観点からは、ArrayListを含むデコレータクラスを作成し、必要な方法で操作する方がよい場合があります。

関連する問題