Java通用比较器

Java通用比较器,java,generics,comparator,Java,Generics,Comparator,然后它确实起作用了,但给了我一个警告说 comparator = new comp; 我可以理解原始类型的含义。我没有指定类型,但不知何故它是有效的,如果我试图通过指定类型来修复警告,那么它会抛出一个错误。你能帮我弄清楚吗?我知道。。。我是一个傻瓜我的代码一定是你眼中的痛。我正在玩通用比较器,并尝试着熟悉很多东西。谢谢。您的代码让您感到困惑,因为comp定义的T隐藏了arr定义的T。对于下面的解释,我将它们称为Tcomp和Tarr Tcomp需要扩展compariable,但Tarr不需要扩展

然后它确实起作用了,但给了我一个警告说

comparator = new comp;

我可以理解原始类型的含义。我没有指定类型,但不知何故它是有效的,如果我试图通过指定类型来修复警告,那么它会抛出一个错误。你能帮我弄清楚吗?我知道。。。我是一个傻瓜我的代码一定是你眼中的痛。我正在玩通用比较器,并尝试着熟悉很多东西。谢谢。

您的代码让您感到困惑,因为
comp
定义的
T
隐藏了
arr
定义的
T
。对于下面的解释,我将它们称为
Tcomp
Tarr

Tcomp
需要扩展
compariable
,但
Tarr
不需要扩展,这意味着
Tarr
不能“映射”到
Tcomp

要修复,请更改
Tarr
,因此还需要扩展
可比较的

warning: [rawtypes] found raw type: arr.comp
comparator = new comp();
或者,将
comp
作为一个内部类,并让它重用外部类中的
T

static class comp<T extends Comparable<T>> implements Comparator<T>

您在哪里运行新公司?这个
T
类型在这里的类之外是不存在的,如果它存在,那么它必须是一个在其他方面类似的类型。另外,
newcomp只是没有编译,你需要括号谢谢你的详细解释@如果这回答了您的问题,您应该单击问题旁边的复选标记,以便其他人可以看到问题的回答令您满意。
comparator = new comp;
warning: [rawtypes] found raw type: arr.comp
comparator = new comp();
public class arr<T extends Comparable<T>>
static class comp<T extends Comparable<T>> implements Comparator<T>
class arr<T extends Comparable<T>>
{
    class comp implements Comparator<T>
public class arr<T extends Comparable<T>>
{
    ArrayList<T> list;
    Comparator<T> comparator;
    public arr()
    {
        list = new ArrayList<T>();
        comparator = Comparator.naturalOrder();
    }
    // rest of code
}