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