Конфликт имен при реализации Comparable
Я не эксперт по Java, но обычно я могу определить ошибки, с которыми я сталкиваюсь при работе с ним. Этот конкретный, однако, заставляет меня чесать голову.
У меня есть следующий класс (с ненужным пухом, удаленным для простоты чтения этого поста)
package miui.content.res;
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.content.res.Configuration;
import android.os.Parcel;
import android.os.RemoteException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ExtraConfiguration
implements Comparable<ExtraConfiguration>
{
public int themeChanged;
public int compareTo(ExtraConfiguration that)
{
return this.themeChanged - that.themeChanged;
}
}
Мне это кажется довольно простым, но при компиляции я получаю следующую ошибку:
out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/src/miui/content/res/ExtraConfiguration.java:2:
name clash:
compareTo(java.lang.Object) in miui.content.res.ExtraConfiguration and
compareTo(T) in java.lang.Comparable<miui.content.res.ExtraConfiguration>
have the same erasure, yet neither overrides the other
Я немного освежил концепцию стирания, и метод CompareTo(), который я показываю в фрагменте кода, является единственным в классе ExtraConfiguration. На данный момент я не уверен, в чем проблема.
Этот конкретный класс взят из фреймворка Android для ПЗУ, известного как MIUI, который я пытаюсь скопировать из некоторого декомпилированного источника. В то же время я просто удалил 'Comparable'
Заранее спасибо.
2 ответа
Вы должны быть в состоянии сделать это, чтобы обойти это, но я не могу объяснить, почему вы получаете ошибку:
public class ExtraConfiguration
implements Comparable<Object>
{
public int themeChanged;
public int compareTo(Object that)
{
if (!(that instanceof ExtraConfiguration)) {
throw new ClassCastException();
} else {
return compareTo((ExtraConfiguration) that);
}
}
public int compareTo(ExtraConfiguration that)
{
return this.themeChanged - that.themeChanged;
}
}