1

Struts2アクションクラスが1つあります

のゲッター/セッターがいますjava.util.List list;

ジェネリック型はわかりませんList<?> list;

私はここにコードを持っています:

 public class Test
 {
    private List list;

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public String execute()throws Exception
    {
       for(int i=0;i<list.size();i++)
       {
           //how can print here list
           // in this situation i have List<Detail> list
           // filed is id ,username,password
           // but i want to print dynamically get class name and then filed name and then print list
       }
    }
 } 
4

3 に答える 3

1

まず、Listを使用するだけでなく、メソッドをジェネリックメソッドにする必要があります。次の線に沿った何か

public void parseList(List<T> list) {
    for (T list_entry : list) {
        System.out.println("File name: "+list_entry.getClass());
        System.out.println("List entry: " + list_entry);
    }
}

これは実際にファイル名を出力するのにはあまり役立たないことはわかっていますが、リストからオブジェクトのランタイムクラスを取得するのには役立ちます。

于 2013-02-18T09:41:03.647 に答える
0

Listジェネリッククラスです。ただし、このジェネリッククラスで使用するタイプを知っておく必要があります。ループListで(あなたのケース)を使用する場合は、次のように書く必要がありますfor

for(Object o: list){
  if (o instanceof Detail){ //you can omit it if you 100% sure it is the Detail
   Detail d = (Detail)o; //explicitly typecast 
   //print it here 
  }
}  

しかし、それがsリストlistであることを100%確実にするためにプロパティを専門化する方が良いですDetail

private List<Detail> list;

public List<Detail> getList() {
    return list;
}

public void setList(List<Detail> list) {
    this.list = list;
}

その後、あなたは使用することができます

for(Detail d: list){
   //print it here 
}  
于 2013-02-18T12:19:55.447 に答える
0

以前に投稿された回答として、「foreach」ループを使用できます。

for(Object element : list) {
 System.out.println("Class of the element: " + element.getClass());
 // If you want to do some validation, you can use the instanceof modifier
 if(element instanceof EmployeeBean) {
  System.out.println("This is a employee");
  // Then I cast the element and proceed with operations
  Employee e = (Employee) element;
  double totalSalary = e.getSalary() + e.getBonification();
 }
}

「forwhile」ループでそれを実行したい場合:

for(int i = 0; i < list.size(); i++) {
 System.out.println("Element class: " + list.get(i).getClass());
 if (list.get(i) instanceof EmployeeBean) {
  EmployeeBean e = (EmployeeBean) list.get(i);
  // keep with operations
 }
}
于 2013-02-18T13:39:04.253 に答える