【问题标题】:How to set & fetch fields of inner class in another class如何在另一个类中设置和获取内部类的字段
【发布时间】:2021-01-25 10:18:44
【问题描述】:
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());
        


}
}

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

【问题讨论】:

  • 静态内部类独立于它们的外部类而存在。我认为您只需要删除 static 关键字即可。

标签: java spring static inner-classes


【解决方案1】:

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

首先是导入内部类:

import com.pr.trio.lalala.SegmentationFieldValue;

第二个是在使用时限定类名:

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

然后你可以调用这个类的setter,并在你对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));

从您的评论代码来看,您似乎也在寻找一种将元素添加到列表中的速记方法。一个简单的实现可能如下所示(在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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2018-11-29
    • 2012-06-14
    相关资源
    最近更新 更多