我正在尝试为一大堆类定义一个容器,因为代码的某些部分对于不同的容器会更有意义。例如,我可能在某些地方使用Set,在其他地方使用List。
我试着这样做:
public class AllModes<T> {
private T<Car> car;
private T<Boat> boat;
private T<Train> train;
private T<Plane> plane;
...
}
但是我得到的错误是“T型不是通用的;它不能用参数&lt; Car&gt;参数化”
我在多个变量中定义它们而不是基于超类的单个HashSet的原因是我希望得到返回正确类型的方法,以避免此类的使用者需要在每个对象都具有其拥有不同的领域。
答案 0 :(得分:2)
参数Collection
在您的示例中是uselss。只需使用一个class AllModes {
private List<Car> cars;
private List<Boat> boats;
private List<Train> trains;
private List<Plane> plain;
}
来存储所有必需的对象。
AllModes
如果您想要选择特定的集合类型 - 当您在Supplier
中只有一个集合时,这很容易且安全。但是你有4种不同的类型。我认为你可以使用class AllModes {
private final Collection<Car> cars;
private final Collection<Boat> boats;
private final Collection<Train> trains;
private final Collection<Plane> plain;
public AllModes(Supplier<Collection<?>> supplier) {
cars = (Collection<Car>)supplier.get();
boats = (Collection<Boat>)supplier.get();
trains = (Collection<Train>)supplier.get();
plain = (Collection<Plane>)supplier.get();
}
}
提供的方法:
AllModes modesWithSet = new AllModes(HashSet::new);
AllModes modesWithList = new AllModes(ArrayList::new);
客户端代码如下:
import uiBootsrapDatetimepicker from 'angularjs-bootstrap-datetimepicker';
angula.module('myModule', [uiBootsrapDatetimepicker])