gpt4 book ai didi

Java 泛型 : How to avoid a mess in class header

转载 作者:行者123 更新时间:2023-12-01 22:34:09 26 4
gpt4 key购买 nike

我正在使用 java 泛型,我想避免类头中出现困惑。

// The car saves a generic list
class Car<L>{
ArrayList<L> exampleList=new ArrayList();

public void ArrayList<L> getExampleList(){
return exampleList;
}
}


class Mercedes extends Car<Engines> ...
class Porsche extends Car <Wheels>...


class Warehouse<T extends Car>{
T car;

// I want to work with a generic List here
public void useListFromCar(){
// This returns a simple ArrayList but not a ArrayList<L>
car.getExampleList();

}
}


我需要能够使用通用列表,而不仅仅是 ArrayList。我知道解决这个问题的唯一方法会导致我的类标题困惑。此外,这将是 header 中的冗余信息。具体的子车已经知道List的类型。为什么仓库需要知道这一点。

// Redundant and messy header :(
class Warehouse<L, T extends Car<L>>{
T car;


public void useListFromCar(){
// This returns the desired ArrayList<L>
car.getExampleList();

}
}

我想你可以想象,对于更大的类来说,这变得非常难以管理。有办法避免这种情况吗?

最佳答案

按照你的方法,没有问题。问题在于你抽象它的方式:

为什么不同品牌的汽车有发动机、车轮等通用类型?发动机和车轮是汽车的部件。您可以编写多个名为 Engine、Wheel 的接口(interface),并实现它们的具体类。在您的 Car 类中,它应该包含这些组件。通用类型可以是品牌名称。所有代码都是根据现实世界的常识生成的。如果你写了一些没有意义的东西,那么它肯定会变得一团糟。

这是一个合理的例子:

interface Car<L>{
List<Wheel> wheels;
Engine engin;
//get set method
}

interface Wheel{
String getBrand();
String getquality();
...
}
interface Engine{
String getHorsePower();
String getSize();
...
}
class MuscleCar implements Car<Mercedes>{
...
}
class RacingCar implements Car<Mercedes>{
...
}




class Warehouse<T extends Car>{
List<T> cars;

// I want to work with a generic List here
public void useListFromCar(){
// This returns a simple ArrayList but not a ArrayList<L>
for(T car: cars){
car.getBrand();
car.getType();
car.getEngine(); //etc..
}
}
}

关于Java 泛型 : How to avoid a mess in class header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58535526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com