Измените DataSet, чтобы принимать объекты Comparable

Мне нужно изменить DataSet, чтобы принимать сопоставимые объекты. Тестер не компилируется, и я не знаю, как распечатать метод compareTo. Следует ли мне использовать для тестера ArrayList? Спасибо заранее!

public interface Comparable
{
/**
 Compares this object with another.
  @param other the object to be compared
  @return a negative integer, zero, or a positive integer if this object
  is less than, equal to, or greater than, other
*/
int compareTo(Object other);
}

public class DataSetComparable
{
private double sum;
private Object maximum;
private Object minimum;
private int count;
private Comparable comparer;

/**
  Constructs an empty data set with a given measurer.
  @param aMeasurer the measurer that is used to measure data values
*/
public DataSetComparable(Comparable acomparer)
{
  sum = 0;
  count = 0;
  maximum = null;
  minimum = null;
  comparer= acomparer;
}

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

     maximum = x;

    if (count == 0 || comparer.compareTo(minimum) > comparer.compareTo(x))

    minimum=x;
    count++;

}


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

/**Gets the smallest of the added data.
*@return the minimum or 0 if no data has been added
**/

 public Object getMinimum()
{
  return minimum;
}
}

 public class String implements Comparable {

private String input;
private int holder;

public String(String aninput){
    input= aninput;
    holder=0;
}

public String getComparer(){
    return input;
}

public String getString(){
    return input;
}

public int compareTo(Object other){
    String temp= (String) other;
    if(input.compareTo(temp)<0){
        holder=-1;  
    }
    else if (input.compareTo(temp)== 0) {
        holder= 0;
    }
    else{
        holder= 1;
    }
    return holder;
}
 }

 public class StringTester{
public static void main (String [] args){

  Comparable c = new String();
  DataSetComparable data = new DataSetComparable(c);

  data.add(new String("Jimmy"));
  data.add(new String("Amy"));
  data.add(new String("Melissa"));
  data.add(new String("Melissa"));

  String max = (String) data.getMaximum();
  String min = (String) data.getMinimum();

  System.out.println("Maximum String = " + max);
  System.out.println("Minimum String = " + min);
}
 }

В частности, ошибка гласит:

Конструктор String в классе String не может применяться к данным типам.


person Hannah    schedule 18.02.2013    source источник
comment
В частности, ошибка говорит: конструктор String в классе String не может применяться к данным типам.   -  person Hannah    schedule 18.02.2013


Ответы (1)


Ваш код включает это:

 public class String implements Comparable {
      ...
 }

Вы понимаете, что существует стандартный класс библиотеки Java под названием String, который по умолчанию импортируется в каждый класс? Если вы реализуете свой собственный класс с именем String, вы получите очень запутанные сообщения об ошибках компиляции.

Я настоятельно рекомендую вам изменить имя вашего класса на другое; например StringHolder.


Обратите внимание, что технически вы можете определить класс с именем String. Однако правила, которые использует Java для устранения неоднозначности имен классов, не предназначены для этого варианта использования ... и вам придется ссылаться на java.lang.String по его полному имени, где бы вы его ни использовали. И другие люди, читающие / изменяющие ваш код, найдут это действительно неудобным / раздражающим.

Лучше всего рассматривать имена классов в пакете java.lang как «зарезервированные» и не определять классы с таким же (неквалифицированным) именем.

person Stephen C    schedule 18.02.2013
comment
Я изменил имя класса на StringHolder, и те же проблемы остались. Именно в этой строке кода программа обнаруживает ошибку: Comparable c = new String (); - person Hannah; 18.02.2013
comment
Ну java.lang.String реализует java.lang.Comparable не ваш Comparable интерфейс. Еще один пример вашей предыдущей ошибки. Но в этом случае исправление состоит в том, чтобы избавиться от вашей версии интерфейса Comparable и просто использовать стандартную. - person Stephen C; 18.02.2013
comment
ох, теперь я понимаю! Я постараюсь исправить свою ошибку. Спасибо! - person Hannah; 18.02.2013