gpt4 book ai didi

Java 类比 Instance 或 String

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:49:57 25 4
gpt4 key购买 nike

我正在尝试创建一个可以与同一类的实例或 String 进行比较的类。

例如,考虑以下内容:

public class Record implements Comparable<Record> {
public String name;

public Record(String name) {
this.name = name;
}

public int compareTo(Record o) {
return name.compareTo(o.name);
}
}

然后我将其放入 ArrayList 中,如下所示:

ArrayList<Record> records = new ArrayList<Record>();
records.add(new Record("3"));
records.add(new Record("1"));
records.add(new Record("2"));

如果我对它们进行排序,它们就会正确排序:

Collections.sort(records);

但是,我不希望能够通过基于字符串的二进制搜索来获取记录。例如:

int index = Collections.binarySearch(records, "3");

问题是没有 compareTo 方法将 String 作为参数,我不确定如何实现它。

我试过:

public class Record implements Comparable<Record>, Comparable<String> {
public String name;

public Record(String name) {
this.name = name;
}

public int compareTo(Record o) {
return name.compareTo(o.name);
}

public int compareTo(String o) {
return name.compareTo(o);
}
}

但是,当然,您不能多次使用不同的参数实现相同的接口(interface)。

因此,我正在寻找一种方法来执行上述操作。我看过以下以前的答案,但没有找到真正充分回答这个问题的答案。至少,如果是的话,我不明白。

基本上,我想做的是:

public int compare(Record r, String s) {
return r.name.compareTo(s);
}

不过,据我所知,如果不实现某种公共(public)接口(interface)或父类(super class),就无法比较不同类型的对象。我真的没有 String 的选项。

如果可能的话,有人可以告诉我如何做吗?谢谢。

更新我意识到我可以执行以下操作:

Collections.binarySearch(records, new Record("3"));

但是,那不是我所追求的。谢谢。

最佳答案

您可以在不使用类型限定的情况下实现 Comparable,并使用 instanceof 检查传入的对象,并根据您接收到的类型采取不同的行为。

关于Java 类比 Instance 或 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com