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

有人能帮我理解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 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<?>>