如何定义方法 compareTo()?
How to define method compareTo()?
上下文:
我有 3 种不同类型的文本格式化程序:
- SnakeCaseFormatter 转换字符串,例如"Hello World" 到 "hello_world"
- KebabCaseFormatter 转换字符串,例如"Hello World" 至 "hello-world"
- PascalCaseFormatter 转换字符串,例如"HellO WoRld" 到 "HelloWorld"
这 3 种类型实现了 Comparable,其中 TextFormatter 是一个接口:
interface TextFormatter {
public TextFormatter clone(String s);
public String format();
}
如何实现 compareTo() 方法,以便 compareTo(TextFormatter o) 方法将当前对象与另一个对象进行比较; returns 如果它在另一个对象之前是负数,如果它在另一个对象之后是正数,如果它们被认为具有相同的顺序则为 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());
}
}
顺便说一句,您的界面中不需要 'public' 限定符。接口中的方法签名必须是 public,所以这是多余的。
为了方便起见,您可能确实想要比较原始字符串。那并不疯狂。不过我不能为你写那个方法,因为我不知道你是如何存储你的字符串的。您可以在我提供的代码中将它们的值替换为 "format()",但您需要在界面中使用 getter,以便它可以保持通用的存储机制或每个 class 的详细信息.
上下文:
我有 3 种不同类型的文本格式化程序:
- SnakeCaseFormatter 转换字符串,例如"Hello World" 到 "hello_world"
- KebabCaseFormatter 转换字符串,例如"Hello World" 至 "hello-world"
- PascalCaseFormatter 转换字符串,例如"HellO WoRld" 到 "HelloWorld"
这 3 种类型实现了 Comparable,其中 TextFormatter 是一个接口:
interface TextFormatter {
public TextFormatter clone(String s);
public String format();
}
如何实现 compareTo() 方法,以便 compareTo(TextFormatter o) 方法将当前对象与另一个对象进行比较; returns 如果它在另一个对象之前是负数,如果它在另一个对象之后是正数,如果它们被认为具有相同的顺序则为 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());
}
}
顺便说一句,您的界面中不需要 'public' 限定符。接口中的方法签名必须是 public,所以这是多余的。
为了方便起见,您可能确实想要比较原始字符串。那并不疯狂。不过我不能为你写那个方法,因为我不知道你是如何存储你的字符串的。您可以在我提供的代码中将它们的值替换为 "format()",但您需要在界面中使用 getter,以便它可以保持通用的存储机制或每个 class 的详细信息.