Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建泛型比较器类_Java_Generics_Types_Comparator - Fatal编程技术网

Java 创建泛型比较器类

Java 创建泛型比较器类,java,generics,types,comparator,Java,Generics,Types,Comparator,我试图制作一个比较器,它可以对任何类型的元素进行比较。我不确定如何创建这个类。我只希望它比较相同类型的两个元素(但不管客户机给它什么类型,例如:Integer、String、Double等等),看看哪一个比另一个大 public class InsertionComparator implements Comparator<T> { /** * Compares two elements. * * @param f1 The first element you want

我试图制作一个比较器,它可以对任何类型的元素进行比较。我不确定如何创建这个类。我只希望它比较相同类型的两个元素(但不管客户机给它什么类型,例如:Integer、String、Double等等),看看哪一个比另一个大

public class InsertionComparator implements Comparator<T>
{
/**
 * Compares two elements.
 * 
 * @param  f1  The first element you want to compare.
 * @param  f2  The second element you want to compare.
 * @return  -1,0,1  Whether or not one is greater than, less than,
 * or equal to one another.
 */
public int compare(<T> element1,<T> element2)
{
    if(element1 < element2)
    {
        return -1;
    }
    else
    {
        if(element1 > element2)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    } 
}
}
公共类InsertionComparator实现Comparator
{
/**
*比较两个元素。
* 
*@param f1是要比较的第一个元素。
*@param f2要比较的第二个元素。
*@return-1,0,1无论一个是否大于、小于,
*或者彼此相等。
*/
公共整数比较(元素1、元素2)
{
如果(元素1<元素2)
{
返回-1;
}
其他的
{
如果(元素1>元素2)
{
返回1;
}
其他的
{
返回0;
}
} 
}
}

请帮忙,谢谢

最接近这一点的是
比较器
,它可以比较实现
可比
接口的任何对象:

class NaturalComparator<T extends Comparable<T>> implements Comparator<T> {
  public int compare(T a, T b) {
    return a.compareTo(b);
  }
}
类自然比较程序实现比较器{
公共整数比较(TA,TB){
返回a.compareTo(b);
}
}
这是你能做的最接近的:只有
可比较的
对象具有你试图在这里建模的“自然顺序”。但通常,一旦您拥有了
可比较的
对象,就不一定需要
比较器
:例如,
集合。排序
可以采用带有
比较器的
列表
,也可以采用带有
可比较的
元素的
列表

  • 如果没有关于类型的一些假设,就无法为所有内容编写一个比较器。您如何处理自定义类?你如何决定哪一个比另一个大?对于野外的更多类,比较器没有意义

  • 另一方面,如果您将自己限制为String、Integer、Double,那么它们是可比较的,您只需使用compareTo()方法编写比较器:


  • 但是你只需要简单地使用元素的自然顺序,这会破坏使用比较器的目的。在这些情况下,通常不需要使用比较器。

    我不知道这是否一定有用,但不可能实现有意义的通用比较器

    例如,由于反射接口,您可以按对象的类名对对象进行排序。或者,甚至可能在某种程度上是由它们的类层次结构决定的。例如,父母之后的孩子

    或者,您可以根据toString()方法生成的内容对它们进行排序。或hashCode()。毕竟,每个物体都有它们

    不管你做什么,记住要考虑任何元素都是空的。< /P>


    我想我们需要知道这个通用比较器的用途。

    首先,您有几个语法错误。试着读读这本书。它可以让你自己解决这个问题和下面的任何问题,因为它解释了什么是泛型以及如何很好地使用它们。你到底需要它做什么?我觉得这不是你真正的问题。这是用户输入的数据,因为只有数字、日期和字母?比较器可以用于任何Java类,比如将一个窗口与另一个窗口进行比较,所以您的问题似乎有点像现在这样宽泛,请具体说明?这是一个完全合理的问题,我不认为“太本地化”的问题。一种获取自然顺序比较器的简便方法:
    Collections.reverseOrder(Collections.reverseOrder())为获得最佳结果,请使用
    T
    
    public int compare(T element1,T element2)
    {
        return element1.compareTo(element2);
    }