如何在另一个 class 中设置和获取内部 class 的字段

How to set & fetch fields of inner class in another class

package com.pr.trio;

import java.util.List;

public class lalala {

     private List<SegmentationFieldValue> segmentationFieldValues;

      
       public static class SegmentationFieldValue {
          private Integer segmentationFieldId;
          private Integer segmentationFieldGroupId;
          private String value;
        public Integer getSegmentationFieldId() {
            return segmentationFieldId;
        }
        public void setSegmentationFieldId(Integer segmentationFieldId) {
            this.segmentationFieldId = segmentationFieldId;
        }
        public Integer getSegmentationFieldGroupId() {
            return segmentationFieldGroupId;
        }
        public void setSegmentationFieldGroupId(Integer segmentationFieldGroupId) {
            this.segmentationFieldGroupId = segmentationFieldGroupId;
        }
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
       }


    public List<SegmentationFieldValue> getSegmentationFieldValues() {
        return segmentationFieldValues;
    }


    public void setSegmentationFieldValues(List<SegmentationFieldValue> segmentationFieldValues) {
        this.segmentationFieldValues = segmentationFieldValues;
    }
       
}
package com.pr.trio;

import java.util.Arrays;

public class kk {

    public static void main(String[] args) {
        
        lalala l1 = new lalala();
        
        
        //currently passed as an empty array, want to set SegmentationFieldId & value here from inner class
        l1.setSegmentationFieldValues(Arrays.asList());  
        
        //lalala.SegmentationFieldValue.this.setSegmentationFieldId(15);
        
        
        System.out.println(l1.getSegmentationFieldValues());
        


}
}

所以在这里,我无法传递分段字段的值而不是空数组,会出错。那么如何设置内部 class 字段的值并将其传递到我的列表?

鉴于你的 SegmentationFieldValue class 是 public,在另一个 class 中使用它是微不足道的,基本上有两种方法可以解决这个问题:

首先是导入内层class:

import com.pr.trio.lalala.SegmentationFieldValue;

第二个是在使用 class 名称时对其进行限定:

lalala.SegmentationFieldValue a = new lalala.SegmentationFieldValue();

然后您可以在此 class 上调用设置器,并在对 setSegmentationFieldValues 的调用中使用这些对象:

lalala.SegmentationFieldValue a = new lalala.SegmentationFieldValue();
a.setSegmentationFieldId(1);
a.setSegmentationFieldGroupId(1);
a.setValue("a");

lalala.SegmentationFieldValue b = new lalala.SegmentationFieldValue();
b.setSegmentationFieldId(2);
b.setSegmentationFieldGroupId(1);
b.setValue("b");

l1.setSegmentationFieldValues(Arrays.asList(a, b));

从您的评论代码来看,您似乎也在寻找一种 shorthand 方法来将元素添加到您的列表中。一个简单的实现可能如下所示(在 class lalala 中):

public void addSegmentationFieldValue(Integer id, Integer groupId, String value)
{
    if (segmentationFieldValues == null)
    {
        segmentationFieldValues = new ArrayList<>();
    }

    SegmentationFieldValue result = new SegmentationFieldValue();
    result.setSegmentationFieldId(id);
    result.setSegmentationFieldGroupId(groupId);
    result.setValue(value);
    segmentationFieldValues.add(result);
}

之后,您可以在 k1main 方法中执行以下操作:

l1.addSegmentationFieldValue(1, 1, "a");