上下文:
我有3种不同类型的文本格式:
- snakecaseformatter转换字符串,例如" Hello World"到" Hello_world"
- kebabcaseformatter转换字符串,例如" Hello World"到" Hello-World"
- pascalcaseformatter转换字符串,例如" Hello World"到" Helloworld"
,这三种类型的实现是可比的,其中textformatter是接口:
interface TextFormatter {
public TextFormatter clone(String s);
public String format();
}
如何实现compareTo()方法,以使compareTo(textformatter o)方法将当前对象与另一个对象进行比较;如果它在另一个对象之前返回一个负数,则返回一个正数,如果是在另一个对象之后,则为0,如果将它们视为相同的订单?
我假设您想比较格式的值。否则,就像@mohamed所说,可以比较字符串本身。这将比较格式的值:
interface TextFormatter {
public TextFormatter clone(String s);
public String format();
}
class SnakeCaseFormatter implements TextFormatter, Comparable<TextFormatter> {
...
@Override
public int compareTo(TextFormatter other) {
return format().compareTo(other.format());
}
}
您可以将此方法放在界面中,因为Java的最新版本:
interface TextFormatter extends Comparable<TextFormatter> {
TextFormatter clone(String s);
String format();
@Override
default int compareTo(@NotNull TextFormatter other) {
return format().compareTo(other.format());
}
}
顺便说一句,您不需要界面中的"公共"预选赛。接口中的方法签名必须公开,所以这是多余的。
为了方便起见,也许您确实想比较原始字符串。那不是疯了。我不能为您写这种方法,因为我不知道您如何存储自己的字符串。您可以在我提供的代码中将其值替换为" format()",但是您需要在接口中获得一个getter,以便它可以对存储机制或每个类的详细信息保持一般性。