Java泛型示例-我不明白这个?

Java泛型示例-我不明白这个?,java,generics,Java,Generics,假设我有一个名为Car的类,在另一个类中(名称无关紧要),我想创建一个通用向量,它可以容纳typeCar。但是,我显然希望这个向量使用泛型,因此类似于vector myVector等。假设类Car有一个方法getCarMake() 如果我有以下几点: public class myClass<E> { Vector<E> myVector = new Vector<E>(); for(i=0; i<myVect

假设我有一个名为
Car
的类,在另一个类中(名称无关紧要),我想创建一个通用向量,它可以容纳type
Car
。但是,我显然希望这个向量使用泛型,因此类似于
vector myVector
等。假设类
Car
有一个方法
getCarMake()

如果我有以下几点:

    public class myClass<E> {

        Vector<E> myVector = new Vector<E>();

        for(i=0; i<myVector.size(); i++){
           Car tempCar = myVector.get(i);
       sysout(tempCar.getCarMake());
    }

泛型的要点是,您可以编写一个类来控制放入其中的对象的类型。使用
向量
泛型可以控制成员,您可以将其放入。它还使您的代码变得更好,因为您可以像第一个示例那样编写代码


你的第二个例子毫无意义。如果您已经定义了,您的
向量
只能容纳
汽车
s,那么为什么不这样处理它们呢?

泛型的要点是,您可以编写一个类来控制放入其中的对象的种类。使用
向量
泛型可以控制成员,您可以将其放入。它还使您的代码变得更好,因为您可以像第一个示例那样编写代码


你的第二个例子毫无意义。如果您已经定义了,您的
向量
只能容纳
汽车
s,为什么不这样称呼它们呢?

您可以像这样简单地创建
向量

Vector<Car> myVector = new Vector<Car>();

您可以像这样简单地创建
向量

Vector<Car> myVector = new Vector<Car>();

如果不在类或方法的上下文中声明泛型类型E,它就没有任何意义。假设您有一个这样定义的方法--

public-void-aMethod(){
然后您可以在该方法中执行此操作

Vector<E> carVector = new Vector<E>();
for(i=0; i<myVector.size(); i++){
   E tempCar = myVector.get(i);
   sysout(tempCar.getCarMake());
}
Vector=newvector();

对于(i=0;i泛型类型E,如果不在类或方法的上下文中声明它,它就没有意义--

public-void-aMethod(){
然后您可以在该方法中执行此操作

Vector<E> carVector = new Vector<E>();
for(i=0; i<myVector.size(); i++){
   E tempCar = myVector.get(i);
   sysout(tempCar.getCarMake());
}
Vector=newvector();

对于(i=0;i您在仔细考虑您的场景。您定义了您想要做的事情-创建一个只接受Car对象的集合。泛型是允许您这样做的Java功能。也就是说,拥有一个只接受Cars的集合和拥有一个使用泛型的集合并不是相互排斥的,实际上它们是相互依赖的耳鼻喉科

如果没有泛型,您将创建如下向量:

Vector vehicleVector = new Vector();
当然,这个收藏会随意接受各种各样的东西——兔子、汽车、自行车、香蕉

但从Java 5开始,我们得到了泛型,它的名称有些误导,但它允许您在编译时对其他对象强制执行一组对象类型约束

Vector<Car> vehicleVector = new Vector<Car>();
Vector vehicleVector=new Vector();

现在,您不必担心所有其他讨厌的对象类型潜入您的汽车收藏中!此外,您可以编写更少的代码!使这成为可能的魔法是泛型。换句话说,您已经完成了您想要做的事情:)

您在仔细考虑您的场景。您定义了您想要做的事情-创建一个只接受汽车对象的集合。泛型是允许您这样做的Java功能。也就是说,拥有一个只接受汽车的集合和拥有一个使用泛型的集合并不是相互排斥的,实际上它们是相互依赖的!

如果没有泛型,您将创建如下向量:

Vector vehicleVector = new Vector();
当然,这个收藏会随意接受各种各样的东西——兔子、汽车、自行车、香蕉

但从Java 5开始,我们得到了泛型,它的名称有些误导,但它允许您在编译时对其他对象强制执行一组对象类型约束

Vector<Car> vehicleVector = new Vector<Car>();
Vector vehicleVector=new Vector();
现在你不必担心所有其他讨厌的对象类型潜入你的汽车收藏!而且,你可以编写更少的代码!使这成为可能的魔法是泛型。换句话说,你已经完成了你想做的事情:)

这个怎么样

车辆集装箱是您真正想要的

public class VehicleContainer<T extends Vehicle> {

    private Vector <T> vehicleList = new Vector<T>();

    public void enlistVehicles() {
        for (int i=0;i<vehicleList.size();i++) {
            T vehicle = vehicleList.get(i);
            System.out.println(vehicle.getMake());
        }
    }
而Car就是具体的实现

public class Car implements Vehicle {
    public String getMake() {
        return "Audi";
    }
}
这个怎么样

车辆集装箱是您真正想要的

public class VehicleContainer<T extends Vehicle> {

    private Vector <T> vehicleList = new Vector<T>();

    public void enlistVehicles() {
        for (int i=0;i<vehicleList.size();i++) {
            T vehicle = vehicleList.get(i);
            System.out.println(vehicle.getMake());
        }
    }
而Car就是具体的实现

public class Car implements Vehicle {
    public String getMake() {
        return "Audi";
    }
}

我们需要看看你是如何声明
myVector
。没有它,代码就毫无意义。还有,
E
?这些标识符在没有上下文的情况下是没有用的。你是否将E声明为扩展Car?泛型用于你想编写一个类,但却要将它应用于多种类型的数据。这就是你在这里拥有的吗?如果只有您正在使用的数据是类型
Car
,那么您不需要通用实现,您需要一个参数化实例:一个
Vector
的实例。相反,如果您确实需要通用实现,那么为什么您认为它应该只使用类型
Car
?像
Horse
PowerPl>这样的类型呢ant
Date
?Paul,泛型的使用取决于你的代码点。因此,在这方面,这个类的名称确实很重要。如果你只是在内部使用
Car
,那么你应该使用@Bart van Heukelom的解决方案。谢谢guy,我想我现在明白了。我们需要看看你是如何声明
myVector
。c没有这些,ode是没有意义的。还有,什么是
E
?这些标识符在没有上下文的情况下是没有用处的。您是否声明E为扩展Car?泛型用于您希望编写一次类,但将其应用于多种类型的数据。这就是您在这里拥有的吗?如果您正在处理的唯一数据是type
Car
,那么您就不需要了如果不需要泛型实现,您需要一个参数化实例:一个
Vector
的实例