文字列が実際にオブジェクトであり、コンパイラがそうでないと言ったときに私のコードをコンパイルする際にエラーが発生する理由はわかりません。なぜこのエラーメッセージが表示され続けるのかわかりません。文字列はオブジェクトと見なされませんか?
symbol: method compareTo(Object)
location: variable least of type Object
.\DataSet.java:17: error: cannot find symbol
else if(maximum.compareTo(x) < 0)
ここにコードがあります。私は2つのオブジェクトがcompareToメソッドを使用できるように、クラスを比較可能にしようとしています。テスターでは、基本的な文字列オブジェクトを使って比較しようとしています。
public class DataSetTester
{
public static void main(String[] args)
{
DataSet ds = new DataSet();
String man = "dog";
String woman = "cat";
ds.add(man);
ds.add(woman);
System.out.println("Maximum Word: " + ds.getMaximum());
}
}
クラス:
public class DataSet implements Comparable
{
private Object maximum;
private Object least;
private int count;
private int answer;
public void add(Object x)
{
if(count == 0){
least = x;
maximum = x;
}
else if(least.compareTo(x) > 0)
least = x;
else if(maximum.compareTo(x) < 0)
maximum = x;
count++;
}
public int compareTo(Object anObject)
{
return this.compareTo(anObject);
}
public Object getMaximum()
{
return maximum;
}
public Object getLeast()
{
return least;
}
}
Comparableインタフェース:
public interface Comparable
{
public int compareTo(Object anObject);
}
あなたは* java.lang.Comparableとは異なる独自の* 'Comparable'クラスを実装していますか?私はあなたが 'Comparable'のために投稿したコードが汎用化された現代のjava.lang.Comparable'と非常に異なっているからです。 – Borealid
短い答え:StringはObjectですが、Objectは必ずしもStringではありません。 ObjectはComparableを実装していないため、ObjectはcompareTo()できません。オブジェクトをストリングにキャストするか、ジェネリックを使用します。 – irrelephant
@irrelephant:または単にComparable型として変数を宣言します。 –