제네릭 개념을 이해하는 데 어려움이 있습니다. 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;
}
}
지금까지 해보신 것은 무엇입니까? 보통 Generic 클래스는'public class DataSet'와 같이 정의되고'public void add (T x)'나 private 변수'private T maximum;과 같이'T '로 추가 할 객체의 모든 인스턴스를 대체합니다. –
Orin
아마도'DataSet'을 원하고'Measurable'을'T'로 대체하면됩니다. 'getMaximum()'의 리턴 타입 인 목적은보다 잘 입력 될 수있다. –
Andreas
방금 내 대답을 업데이트했습니다. 나는 맞는지 확실하지 않습니다. –