java中泛型类的泛型容器
我应该为Java中的“self”编写什么?我希望“self”在这里的意思是“车辆的具体实现是什么级别的”。这在Java中可能吗java中泛型类的泛型容器,java,generics,Java,Generics,我应该为Java中的“self”编写什么?我希望“self”在这里的意思是“车辆的具体实现是什么级别的”。这在Java中可能吗 import java.util.ArrayList; import java.util.List; abstract class Vehicle { private Garage<self> garage; void setGarage(Garage<self> g) { this.garage = g;
import java.util.ArrayList;
import java.util.List;
abstract class Vehicle {
private Garage<self> garage;
void setGarage(Garage<self> g) {
this.garage = g;
g.vehicles.add(this);
}
}
class Car extends Vehicle {
}
class Garage<T extends Vehicle> {
List<T> vehicles = new ArrayList<>();
void addVehicle(T t) {
vehicles.add(t);
}
}
public class GenericFoo {
public static void main(String[] args) {
Garage<Car> carGarage = new Garage<>();
Car c = new Car();
carGarage.addVehicle(c);
c.setGarage(carGarage);
}
}
import java.util.ArrayList;
导入java.util.List;
抽象类车辆{
私人车库;
停车场(g停车场){
this.garage=g;
g、 车辆。添加(本);
}
}
二等车{
}
班级车库{
列出车辆=新的ArrayList();
无效添加车辆(T){
车辆.增加(t);
}
}
公共类GenericFoo{
公共静态void main(字符串[]args){
车库车库=新车库();
c车=新车();
汽车修理厂。添加车辆(c);
c、 停车场(车库);
}
}
可以创建一些等效的东西,但需要一些额外的努力。请看下面的代码:
import java.util.ArrayList;
导入java.util.List;
公共类泛型示例{
公共静态void main(字符串[]args){
车库车库=新车库();
c车=新车();
汽车修理厂。添加车辆(c);
c、 停车场(车库);
}
抽象静态类车辆{
私人车库;
停车场(g停车场){
this.garage=g;
g、 添加(self());
}
抽象T self();
}
静态级轿车{
@凌驾
汽车自我{
归还这个;
}
}
静态车库{
列出车辆=新的ArrayList();
无效添加车辆(T){
车辆.增加(t);
}
}
}
这里重要的是:
class参数化-事实上,Vehicle
类型是T
本身。我们需要它能够从父级获取实际类型。在我们的例子中,Vehicle
表示T
(实际上可以表示任何子类)Car
可能看起来有点棘手,但事实上,它很容易理解-Vehicle
是对超类中的子类的“引用”T
- self()方法-我将self()方法添加到
类中。请注意,Vehicle
返回的是self()
,而不是T
,这意味着返回的对象类型就是这个具体的实现类。每个实现只需返回Vehicle
this
希望它能解决您的问题。您通常只需使用
this
。您不能做任何类似的事情。在scala中使用“this.type”是可能的。我只是在java中找不到它。。。