Java';什么是仿制药?
有人能帮我理解Java的泛型是如何工作的吗?我理解它的概念。但是对于这个特定的代码示例,我不清楚编译器的错误消息 示例代码: 测试班Java';什么是仿制药?,java,generics,collections,comparable,Java,Generics,Collections,Comparable,有人能帮我理解Java的泛型是如何工作的吗?我理解它的概念。但是对于这个特定的代码示例,我不清楚编译器的错误消息 示例代码: 测试班 // Test code public class A < ListType extends Comparable < ListType >> { // To make the instance variable y public int y; // To make the instance variable s public Strin
// Test code
public class A < ListType extends Comparable < ListType >> {
// To make the instance variable y
public int y;
// To make the instance variable s
public String s;
//Constructor Method
public A(int requiredY, String requiredS) {
y = requiredY;
s = requiredS;
}
more code here...
}
//测试代码
公共类A>{
//使实例变量为y
公共智力;
//使实例变量
公共字符串s;
//构造函数方法
公共A(需要整数,需要字符串){
y=所需的y;
s=所需;
}
更多代码在这里。。。
}
然后在另一节课上我写了
List <A> a = new ArrayList<A>();
more code here...
Collections.sort(a)
List a=new ArrayList();
更多代码在这里。。。
集合。排序(a)
我收到的错误消息是
test.java:20: error: no suitable method found for sort(List<A>)
Collections.sort(a);
^
method Collections.<T#1>sort(List<T#1>) is not applicable
(inference variable T#1 has incompatible bounds
equality constraints: A
upper bounds: Comparable<? super T#1>)
method Collections.<T#2>sort(List<T#2>,Comparator<? super T#2>) is not applicable
(cannot infer type-variable(s) T#2
(actual and formal argument lists differ in length))
test.java:20:错误:找不到适合排序的方法(列表)
收集.分类(a);
^
方法集合。排序(列表)不适用
(推理变量T#1的边界不兼容
平等约束:A
上限:可比您应该检查如何使用
要比较自定义类,您需要实现自定义比较器,然后只有您可以使用collections接口提供的排序方法
您可以查找参考资料。您应该检查如何使用
要比较自定义类,您需要实现自定义比较器,然后只有您可以使用collections接口提供的排序方法
您可以查找参考。您的问题是A
不可比请注意您的类型签名:
public class A<ListType extends Comparable<ListType>>
这意味着A
有一个名为ListType
的泛型类型,A
实现了compariable
,因此可以与A
的其他实例进行比较(和排序)
由于A
现在实现了接口,因此需要定义
A
上的compareTo()
方法您的问题是A
不可比较
。请注意您的类型签名:
public class A<ListType extends Comparable<ListType>>
这意味着A
有一个名为ListType
的泛型类型,A
实现了compariable
,因此可以与A
的其他实例进行比较(和排序)
由于A
现在实现了接口,因此需要定义
A
上的compareTo()
方法可能是为了隐藏类名而将问题写错了,或者是表示泛型时出错了
如果您试图创建一个可以排序的类,那么您可以按照其他人的建议在类a中实现
public class A < ListType extends Comparable < ListType >> {
...
}
由于class C
本身没有实现可比较的类,因此不能将class C
变量传递给class a
构造函数。
如果要创建一个类型,该类型将接受任何扩展了Comparable
的类,则可以使用通配符?
public class A <ListType extends Comparable<?>>
公共A类>
要么是为了隐藏类名而把问题写错了,要么是在表示泛型时弄错了
如果您试图创建一个可以排序的类,那么您可以按照其他人的建议在类a中实现
public class A < ListType extends Comparable < ListType >> {
...
}
由于class C
本身没有实现可比较的类,因此不能将class C
变量传递给class a
构造函数。
如果要创建一个类型,该类型将接受任何扩展了Comparable
的类,则可以使用通配符?
public class A <ListType extends Comparable<?>>
公共A类>
请注意,这与Collections API无关,但与。除了泛型Java教程(如上链接)外,第5章基本上是正确使用泛型的必读内容。请注意,这与Collections API无关,但与。此外还有泛型Java教程(如上链接)的第5章基本上是正确使用泛型所必需的阅读。这应该是实现Comparable
@dimo414谢谢。但是在尝试遵循这种方法之后,编译器给了我两个警告javac test.java注意:test.java使用未检查的或不安全的操作。注意:使用-Xlint:unchecked重新编译以获取详细信息。
你能告诉我警告的原因吗?@ShamveelAhammed如果你按照建议,使用-Xlint:unchecked
标志运行javac
,它将为你提供更多信息。你还可以参考一些其他的警告。一般来说,这意味着你正在进行不安全的强制转换(例如,列表ls=new ArrayList()
)但是,唯一可以确定的方法是查看代码。如果你不能找出问题,考虑一下另一个问题。应该是<代码>实现可比的<代码>。@ dio414谢谢。但是在尝试遵循这种方法之后,编译器给了我两个警告:代码> javac Test.java注:Test.java使用未经检查或不安全的操作。注意:使用-Xlint:unchecked重新编译以获取详细信息。
您能告诉我警告的原因吗?@ShamveelAhammed如果您按照建议并使用-Xlint:unchecked
标记运行javac
,它将为您提供更多信息。您还可以参考一些警告。一般来说,这意味着您正在进行修改一个不安全的强制转换(例如<代码>列表Ls= NealAlayList](/Calp>),但是唯一可以确定的方法是查看代码。如果你不能解决它,考虑下一个问题。
public class A <T extends Comparable<?>>