如何设置 class 数组变量的值?

How to set values for class array variable?

我正在为 API 设置值,我需要为 class 数据类型变量设置值,它是一个数组,我需要知道如何设置值?

我在 java 中尝试过,但我一直遇到编译时错误

Items equipmenxxts = new Items ();

equipmenxxts.setDKU(savedRequest.DKUType());
equipmenxxts.setQuantity(savedRequest.getQuantity());

item.setEquipments(equipmenxxts);

**//error setEquipments(Items[]) in ItemOrder cannot be applied to (Items)**

api class 设置值

public class ItemOrder implements java.io.Serializable {

    private java.lang.String company,
    private Items[] equipments; // class given below

    public ItemOrder() {
    }

    public ItemOrder(Items[] equipments) {
        this.equipments = equipments;
    }

    public java.lang.String getCompany() {
        return company;
    }


    public void setCompany(java.lang.String company) {
        this.company = company;
    }


    public Items[] getEquipments() {
        return equipments;
    }


    public void setEquipments(Items[] equipments) {
        this.equipments = equipments;
    }
}

上面使用的这个class的数据类型

public class Items implements java.io.Serializable {

    private java.lang.String DKU;

    private int quantity;

    public Items() {
    }

    public Items(String DKU, int quantity) {
       this.DKU = DKU;
       this.quantity = quantity;
    }
}

api class设置值

@Service("clApiService")
public class NewApiImpl implements NewApiService {

    @Override
    public Request completeapiNewOrderRep(ServletWebRequest webRequest) {
        try {
            ItemOrder item = new ItemOrder();
            item.setCompany(req.getCompany());

            item.setEquipments(); //error setEquipments(Items[]) in ItemOrder cannot be applied to ()**
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

我希望将(req.setDKU 和数量)的值设置为 item.setEquipments( );

根据我的研究,为数组制作 set 有点设计错误。但是,您可以制作一个 void setItems(Items i),在参数上引入一个 ItemOrder 的特定索引,或者您可以制作一个 "superset",这不是一个真实的集合:

public void superSet(ItemOrder io){
   this.equipments=io.setEquipments(Items[] i);
}

.setEquipments(Items[]) 需要一组项目,但您只传递了一个项目。

首先尝试创建一个包含您的项目的数组:

item.setEquipments(new Items[] {equipmenxxts});

或者,您可以将 equipmentxxts 创建为数组:

final Items[] equipmenxxts = new Items[1];
equipmenxxts[0].setDKU(savedRequest.DKUType());
equipmenxxts[0].setQuantity(savedRequest.getQuantity());

item.setEquipments(equipmenxxts);

此外,以这种方式设置多个项目时,请确保不要暴露您的 class' 内部状态,除非您 真的 知道自己在做什么——为什么!您可以考虑为您的方法使用可变数量的参数:

public Items[] getEquipments() {
    return Arrays.copyOf(equipments, equipments.length);
}

public void setEquipments(Items... equipments) {
    this.equipments = Arrays.copyOf(equipments, equipments.length);
}

现在您可以使用数组作为参数调用 .setEquipments(...),或者使用自定义数量的项目:

item.setEquipments(e1, e2, e3);

您可以重新考虑变量的名称。我不明白,为什么 ItemOrder 对象被称为 "item" - 而你通过 .setEquipments(...)

设置了 "Items" 个对象