首页 > 解决方案 > 如何通过 Generic arrayList 访问对象中的特定数据?

问题描述

在这里,我有一个关于如何通过通用列表对象访问名为Car的对象内的特定数据的问题

- 这是我的课程Car.java

public class Car {
    public String name;
    public double price;
    public String production;
    public Car(String name,double price,String pro){
     this.name=name;
     this.price=price;
     this.production=pro;
     
    }
    public String getName(){return this.name;}
    public double getPrice(){return this.price;}
    public String getProduction(){return this.production;}
}

*我想通过DisplayCarName()方法通过泛型访问 Car 对象的名称,但是发生了错误,编译失败在“ u.get(i).getName();

- 这是我的GenericCar.java

public class GenericCar <T> {
    List<T>u ;
    GenericCar(){
     u = new ArrayList<T>();
    }
   public void Add(T x){
        u.add(x);
    }
   //i want to display only Car class,specifically name of car,but it seems not work!
   public void DisplayCarName(){
    for(int i=0;i<u.size();i++){
        System.out.println(u.get(i).getName());
    }
   }
}

*在我的主类中,我不能使用这个方法car2.DisplayCarName(); 在通用类

public class Main() {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        GenericCar<Car>car2= new GenericCar<Car>();
        car2.Add(new Car("Toyota",20.3,"Toyota"));
        //use this ok!
        System.out.println(car2.u.get(0).getName());
        //but this is not!
        car2.DisplayCarName(); 
    } 
}

*关于我的问题的全部内容是“如何通过通用列表对象访问名为Car的对象内的特定数据,对不起,问题太长了!”

标签: javaobjectgenericsarraylist

解决方案


T 可以是 中的任何类GenericCar<T>,而不仅仅是 Car,因此编译器不知道“getName”指的是 Car 中的方法。

这是修复它的一种方法。您可以使用类型变量的界限来告诉编译器 T 实际上必须是某种 Car:

class GenericCar<T extends Car>

推荐阅读