Java 泛型方法未编译
我编写了一个通用方法来对T类型的对象进行排序。 我的编译器说“找不到符号:方法lte(T)” 你知道我到底有什么问题吗Java 泛型方法未编译,java,generics,Java,Generics,我编写了一个通用方法来对T类型的对象进行排序。 我的编译器说“找不到符号:方法lte(T)” 你知道我到底有什么问题吗 interface Comparable<T>{ boolean lte(T t); } class Sort<T extends Comparable<T>> { static <T> void sort(T[] s) { for (int i = 0; i<s.length;
interface Comparable<T>{
boolean lte(T t);
}
class Sort<T extends Comparable<T>> {
static <T> void sort(T[] s) {
for (int i = 0; i<s.length; i++) {
for (int j = i+1; j < s.length; j++) {
if (s[i].lte(s[j])) {
T t;
t = s[i];
s[i] = s[j];
s[j] = t;
}
}
}
}
public static void main(String[] args) {
String[] names = {"Pete","Jill","May","Anne","Tim"};
sort(names);
for (String s:names)
System.out.println(s);
}
}
接口{
布尔lte(T);
}
类排序{
静态无效排序(T[]s){
对于(int i=0;i您已使用另一个
声明将排序方法设置为泛型,但它不是可比的。您的排序方法是静态的
,因此它不能使用类的
。事实上,该类的
没有使用。请尝试以下操作:
// Not generic here anymore
class Sort {
// Bound goes here
static <T extends Comparable<T>> void sort(T[] s) {
//这里不再通用
类排序{
//邦德在这里
静态无效排序(T[]s){
此外,String
不会扩展您的Comparable
接口,因此这不会起作用(String
甚至没有lte
方法)。您需要传入一些实现Comparable
的对象
充其量,将您的接口命名为与内置接口(且众所周知)相同的名称是令人困惑的接口。我建议将您的Comparable
接口重命名为类似Lteable
的东西,您确定您的类正在扩展您自己的Comparable
,而不是java.lang.Comparable
?java.lang.String
没有lte()
method。是的,我被告知要编写一个对T类型的对象进行排序的方法,其中T作为泛型类型名引入到排序头中,T实现了Compariable。更改应限于修改排序头和排序体。它应该适用于我给出的主要方法。我正在修改去年在大学里做的一个练习,即问题是:以下程序按升序打印字符串序列。请注意,排序仅对字符串数组进行排序。请重写该程序,使其对类型为T的对象进行排序,其中T作为泛型类型名引入排序头中,T实现可比较。更改应限于修改排序头和排序体。“在这种情况下,我认为您不想编写自己的可比接口。我认为他们指的是java.lang.Comparable。(字符串确实实现了java.lang.Comparable。@DannyWalsh那么你不应该创建和使用你自己的Comparable
接口。使用现有的内置Comparable
接口,使用它的compareTo
方法,而不是创建你自己的lte
方法。这正是我所困惑的问题中包含的le接口是讲师给我们的。它还用于其他一些问题。@Mattforsyth他必须使用该接口,因为“原始”可比接口不包括名为lte
的方法。也就是说,他当然可以使用s[I]。compareTo(s[j])>0
,而不是s[I]。lte(s[j])