2016-06-08 49 views
1

我来自c + +背景和c + +我们可以使用指针和存储在一个向量多个数据类型的集合,但我们如何在java中做到这一点。 例如,我想存储: {名称,价格/磅,重量} {名称,价格} 这是一种面包店收据计划。如何在java中的向量中存储多个数据类型的集合?

+0

BakeryItem似乎只需要一个类...所以你创建一个Vector(最好是Arraylist)存储的对象 –

+0

这太笼统了,不能提供有用的答案。我们应该看看你的课程是什么样的,你想要做什么,以及你坚持什么。 – shmosel

+0

@shmosel这对于C++程序员来说不是太普通。我们习惯于把各种各样的东西粘在各种地方,其中有些并不完全合适。指针可以是美丽而有用的东西。 –

回答

2

Java是一种非常面向对象的语言类型,它非常依赖类和对象。您可能会发现更容易为Receipt授课,然后只需存储阵列收据

但是,您可能会也可能不希望在Receipt类中拥有Products列表。通过这种方式,您可以在单个收据上包含多个项目。这也需要一个Product类,而且在Receipt类中,您可以将name,pricePerPound,weight更改为产品列表,而您的Product类将改为存储这些变量。然后每个产品将有一个名字,每磅的价格和重量

public class Receipt { 
    String name; 
    double pricePerPound; 
    double weight; 

    //Constructor 
    public Receipt() { 

    } 

    //Other methods can go here, like getters and setters 
} 

然后,你可以有数组Receipts

Receipt[] receipts = new Receipt[10]; 

或者您可以使用java.util.ArrayList得到的数据类型,这将改变在大小

ArrayList<Receipt> receipts = new ArrayList<>(); //ArrayList of type Receipt 

ArrayList文档的方法,您可以使用

1

在Java中执行此操作的正确方法是创建一个接口,该接口表示您希望存储在集合中的对象的常见属性,然后让这些对象的每个类都实现该接口。

interface BakeryItem { 
    String getName(); 
    float getPrice(); 
} 

class WeightedItem { 
    private final float weight; 
    private final float pricePerPound; 

    public float getPrice() { 
     return weight * pricePerPound; 
    } 
} 

List<BakeryItem> bakeryItems; 

如果您需要使用不同类的特定属性的话,我建议使用visitor pattern的逻辑从数据中分离出来。

使用List<Object>可以在检索中存储不同的类,并在检索时进行投射,但由于各种原因,这不是建议的方法。

相关问题