Java.

2013-08-08 2 views
0

Structure 내가 3 개 필드를 가지고 내 자신의 클래스를 만들고 싶습니다을 목록에 유사한 새로운 클래스를 생성. 첫 번째 필드 - 정수, 두 번째 필드는 객체 (Strings, Lists)를 취하고 세 번째 필드는 정수를 취합니다. 나는 두 가지를 이해하지 못합니다. Java.

  1. 어떻게 변수의 스토리지를 구성 할 수 있습니다. 배열 또는 목록에서이 값을 저장하는 메서드를 작성해야합니까? 개체 값을 저장하는 방법?
  2. 두 번째 입력란의 경우. 입력이 String 또는 List이면 어떤 Type이 필요합니까? 그리고 내가 원시적 인 유형으로 받아들이 길 원한다면, 무엇을 할 것인가? 개체를 저장하는 방법?

    public class Record { 
        private int[] number; 
        private int[] count; 
        private Object[] code; 
    
        public void add(int newNumber, List<String> newCode, int newCount){ 
    
        return; 
        }; 
    
        public void add(List<String> newCode, int newCount,){ 
    
         return; 
        }; 
    

이 작동하지 않습니다

.

Object nobj = new Object(); 
nobj = "ss"; 
+0

을 : 당신이 뭔가 잘못 이해처럼 ... 대신 일반'[]'배열 –

+0

오의'ArrayList'를 사용하는 것 OOP에서 ... – SeniorJD

+0

@Andreas는 설명합니까?SeniorJD 왜?) – Eldar

답변

6

오케이. 당신이 수업의 목적을 오해 한 것 같습니다. 단일 Record을 시뮬레이트하기 위해 클래스를 작성했지만 많은 값을 저장하려면 Record으로 작성했습니다.

하자 조금

public class Record { 
private int number; 
private int count; 
private Object code; 

public Record(int number, int count, Object code) 
{ 
    this.number = number; 
    this.count = count; 
    this.code = code; 
} 

가 그런 다음의 Record 클래스 사이의 인터페이스를 관리하는 클래스를 만들 수 있습니다 클래스 구조를 재 배열 그래서 예를 들면 :

public class Storage 
{ 
    List<Record> records; 
    public Storage() 
    { 
     this.records = new ArrayList<Record(); 
    } 

    public void addRecord(int number, int count, Object code) 
    { 
      records.add(new Record(number, count, code)); 
    } 
} 

그 길을 계속 지키려는 끔찍한 배열을 가진 많은 배열을 망치고있는 것은 아닙니다. 모든 것이 개체 내부에 깔끔하게 정리되어 있습니다.

두 번째 속성

와 귀하의 문제는 이제, 당신이이 변수 아무것도을 저장할 보인다. 이것은 원래 문제보다 다소 복잡하지만, Generics이 문제를 해결할 것이라고 생각합니다. 나는 당신을 위해 코드를 쓰지 않을 것이지만, 내가 할 수있는 일은 시위를하는 것이다.

public class GenericExample<T> 
{ 
    T object; 

    public GenericExample(T object) 
    { 
     this.object = object; 
    } 
} 

좋아요, 그럼 여기서 한 것은 간단합니다. 나는 새로운 클래스 인 GenericExample을 만들었고,이 클래스는 특별한 타입 인 T을 가지고 있다고 말했습니다. 이 유형은 런타임에 정의되며 많은 다른 값을 정의 할 수 있음을 의미합니다. 예를 들어.

GenericExample<String> example = new GenericExample<String>("This is a string"); 
GenericExample<Object> example2 = new GenericExample<Object>(new Object()); 

유형을 정의하고 런타임에 전달하는 방법을 확인하십시오. 이제 그것을 당신의 클래스 구조에 적용하는 것에 대해 생각해보십시오.

+0

+1 염려의 분리를 고려한 좋은 제안 –

+0

+1 그리고 병렬 배열을 피하십시오. –

+0

몇 마디, HashList가 아닌 ArrayList가 필요한 이유. 첫 번째 필드가 숫자 (일련 번호)이면 더 좋을까요? HashMap? 그리고 더 많은 필드가있는 레코드 하위를 만들고 싶다면 다른 목적으로 두 번째 저장소를 만들어야합니까? – Eldar

1

당신이 정말로 List 직접 만들 필요가없는 경우, 그 피하십시오. 그냥 데이터를 자신의 유형을 생성하고 List에 대한 매개 변수로 사용 : 첫 번째 질문에 대해

public class Record { 
    private int number; 
    private int count; 
    private Object code; 

    // Constructors, setters and getters 
}; 

List<Record> myList = new ArrayList<>();