카테고리 없음

다른 클래스에서 내부 클래스의 필드를 설정하고 가져 오는 방법

기록만이살길 2021. 2. 22. 09:12
반응형

다른 클래스에서 내부 클래스의 필드를 설정하고 가져 오는 방법

1. 질문(문제점):

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());
        


}
}

그래서 여기서는 빈 배열 대신 분할 필드에 대한 값을 전달할 수 없어 오류가 발생합니다. 그렇다면 내부 클래스 필드의 값을 어떻게 설정하고 내 목록에 전달할 수 있습니까?

2. 해결방안:

당신으로 보는 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));

주석 코드로 판단하면 목록에 요소를 추가하는 간단한 방법을 찾고있는 것 같습니다. 간단한 구현은 다음과 같을 수 있습니다 (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);
}

그 후의 main방법 에서 다음을 수행 할 수 있습니다 k1.

l1.addSegmentationFieldValue(1, 1, "a");
65882802
반응형