Java 如何使此代码与泛型一起工作?

Java 如何使此代码与泛型一起工作?,java,generics,Java,Generics,我有一些只使用另一个堆栈对堆栈进行排序的代码(这是一个面试问题)。代码本身似乎是有效的。我希望使用泛型实现它,以便在以下条件下,任何类型的堆栈都是可排序的: sort方法保持静态(我希望避免参数化整个类) Li >可以使用原生比较器操作符(如,在爪哇上使用对象上的比较器操作符(包或原语)是不可能的。C++支持这样的可能性。但是,可以通过强制参数类型来实现可比较性来实现一种解决方案。您的签名应该是这样的: public <T extends Comparable<? super T&

我有一些只使用另一个堆栈对堆栈进行排序的代码(这是一个面试问题)。代码本身似乎是有效的。我希望使用泛型实现它,以便在以下条件下,任何类型的堆栈都是可排序的:

  • sort方法保持静态(我希望避免参数化整个类)

  • <> Li >可以使用原生比较器操作符(如,在爪哇上使用对象上的比较器操作符(包或原语)是不可能的。C++支持这样的可能性。但是,可以通过强制参数类型来实现可比较性来实现一种解决方案。您的签名应该是这样的:

    public <T extends Comparable<? super T>> static void sort(Stack<T> stack)
    

    在爪哇上使用对象(包或原语)的比较运算符是不可能的。C++支持这样的可能性。但是,可以通过强制参数类型来实现可比较性来实现一种解决方案。

    public <T extends Comparable<? super T>> static void sort(Stack<T> stack)
    

    你提到可比性是对的

    你的方法可以是

    static <T extends Comparable<T>>void sort(Stack<T> stack) {
    
    静态无效排序(堆栈){
    
    比较curr
    curr.compareTo(stack.peek()) < 0
    
    当前比较(stack.peek())<0
    您提到可比性是正确的

    你的方法可以是

    static <T extends Comparable<T>>void sort(Stack<T> stack) {
    
    静态无效排序(堆栈){
    
    比较curr
    curr.compareTo(stack.peek()) < 0
    
    当前比较(stack.peek())<0
    好的,您的第二点是不可能的(Java不支持运算符重载),rest是可能的。您尝试过实现它吗?如果您想使用
    Comparable
    (因为Java不支持运算符重载),您需要做一些小的调整。也就是说,您应该替换
    curr
    使用
    curr.compareTo(stack.peek())<0
    。啊,谢谢你提醒我Java和运算符重载。我有一种感觉,我在要求不可能的事情……嗯,你的第二点是不可能的(Java不支持运算符重载),rest是可能的。您尝试过实现它吗?如果您想使用
    Comparable
    (因为Java不支持运算符重载),您需要进行一些小的调整。也就是说,您应该将
    curr
    替换为
    curr.compareTo(stack.peek())<0
    。啊,谢谢你提醒我关于Java和运算符重载的事情。我有一种感觉,我在要求不可能的事情……感谢@user1666090(+1)对于正确的泛型。我忘记了在
    Comparable
    后面额外的
    。为了获得最佳效果,请使用
    @newacct:你不是说扩展,而不是超级吗?我想扩展似乎比超级更具逻辑性和正确性。不,你是对的。是的。我会补充。谢谢你了解我!:DThanks to@user1666090(+1)对于正确的泛型。我忘记了在
    Comparable
    后面额外的
    。为了获得最佳结果,请使用
    @newacct:你不是说扩展而不是超级吗?我想扩展似乎比超级更具逻辑性和正确性。不,你是对的。是的。我会补充。感谢你学习了一些东西!对于最佳结果,请使用
    获得最佳结果ts使用