2016-09-14 4 views
-3

제네릭 개념을 이해하는 데 어려움이 있습니다. DataSet 클래스를 일반 형식으로 변환해야합니다. 특히 DataSet의 필드를 사용하여 수행 할 작업을 얻지 못합니다. 여기 내가 해낸 솔루션입니다 : 내가일반 클래스로 변환

/** 
    Computes the average of a set of data values. 
*/ 
public class DataSet 
{ 
    private double sum; 
    private Measurable maximum; 
    private int count; 

    /** 
    Constructs an empty data set. 
    */ 
    public DataSet() 
    { 
     sum = 0; 
     count = 0; 
     maximum = null; 
    } 

    /** 
     Adds a data value to the data set. 
     @param x a data value 
    */ 
    public void add(Measurable x) 
    { 
     sum = sum + x.getMeasure(); 
     if (count == 0 || maximum.getMeasure() <  x.getMeasure()) 
      maximum = x; 
     count++; 
     } 

    /** 
     Gets the average of the added data. 
     @return the average or 0 if no data has been added 
    */ 
    public double getAverage() 
    { 
     if (count == 0) return 0; 
     else return sum/count; 
    } 

    /** 
     Gets the largest of the added data. 
     @return the maximum or 0 if no data has been added 
    */ 
    public Measurable getMaximum() 
    { 
     return maximum; 
    } 
} 

업데이트 우리는 T. 모든 서명을 대체 할 필요가 있음을 이해한다 자신에게 질문을 물어

public class DataSetGen <T> 
{ 
    private double sum; 
    private T maximum; 
    private int count; 

    /** 
     Constructs an empty data set. 
    */ 
    public DataSetGen() 
    { 
     sum = 0; 
     count = 0; 
     maximum = null; 
    } 

    /** 
     Adds a data value to the data set. 
     @param x a data value 
    */ 
    public void add(T x) 
    { 
     sum = sum + x.getMeasure(); 
     if (count == 0 || maximum.getMeasure() < x.getMeasure()) 
     maximum = x; 
     count++; 
    } 

    /** 
     Gets the average of the added data. 
     @return the average or 0 if no data has been added 
    */ 
    public double getAverage() 
    { 
     if (count == 0) return 0; 
     else return sum/count; 
    } 

    /** 
     Gets the largest of the added data. 
     @return the maximum or 0 if no data has been added 
    */ 
    public T getMaximum() 
    { 
     return maximum; 
    } 
} 
+0

지금까지 해보신 것은 무엇입니까? 보통 Generic 클래스는'public class DataSet '와 같이 정의되고'public void add (T x)'나 private 변수'private T maximum;과 같이'T '로 추가 할 객체의 모든 인스턴스를 대체합니다. – Orin

+0

아마도'DataSet '을 원하고'Measurable'을'T'로 대체하면됩니다. 'getMaximum()'의 리턴 타입 인 목적은보다 잘 입력 될 수있다. – Andreas

+0

방금 ​​내 대답을 업데이트했습니다. 나는 맞는지 확실하지 않습니다. –

답변

0

시작 "이것은 가정된다 ???의 집합으로 ". 귀하의 경우에는 아마 Measurable의 하위 클래스 집합입니다.

이제이 기능을 사용하면 제네릭 형식을 어디에 넣을 수 있는지 알아낼 수 있습니다.

+0

나는 그것을 알아 냈는지 확실하지 않습니다. –

+0

답변을 업데이트했습니다. 난 단지 추가 할 필요가 있다고 생각 : public class DataSetGen