Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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_Compare - Fatal编程技术网

Java 按泛型属性的属性对对象排序

Java 按泛型属性的属性对对象排序,java,generics,compare,Java,Generics,Compare,假设我有这门课: public class Bucket<T> { T filling; } 或 在代码的一部分中,我有一个存储桶列表: LinkedList<Bucket> list; LinkedList列表; 现在,我想按属性“volume”对“list”(Bucket)的元素进行排序。 但是我不能比较t.volume。那么,我该怎么做呢 如果我的问题很愚蠢,请提前道歉,我仍在学习java。我回答您的问题时假设这是一个理论问题,我不建议您实现它

假设我有这门课:

public class Bucket<T> {
        T filling;
}

在代码的一部分中,我有一个存储桶列表:

LinkedList<Bucket> list;
LinkedList列表;
现在,我想按属性“volume”对“list”(Bucket)的元素进行排序。 但是我不能比较
t.volume
。那么,我该怎么做呢


如果我的问题很愚蠢,请提前道歉,我仍在学习java。

我回答您的问题时假设这是一个理论问题,我不建议您实现它,而是建议您找到更好的模式来做您想要的事情

您要对存储桶列表进行排序。要调用Collections.sort()方法,Bucket需要实现Comparable(从而定义compareTo方法)

您应该定义一个由“填充”元素实现的接口

接口元素{
float getVolume();
空隙集体积(浮动体积);
}
class油机具元件{
浮子体积;
@凌驾
公共卷{
返回量;
}
@凌驾
公共void设置卷(浮动卷){
这个。体积=体积;
}
}
类水元素{
浮子体积;
@凌驾
公共卷{
返回量;
}
@凌驾
公共void设置卷(浮动卷){
这个。体积=体积;
}
}
现在您可以定义Bucket类:

类Bucket实现可比性{
元素填充;
@凌驾
公共整数比较(桶o){
返回Float.compare(filling.getVolume(),o.filling.getVolume());
}
}
该代码:

publicstaticvoidmain(字符串[]args){
列表元素=新链接列表();
铲斗o=新铲斗();
o、 加注=新机油();
o、 填充。设置体积(5);
铲斗w=新铲斗();
w、 填充=新水();
w、 填充。设置体积(12);
增加(w)项;
增加(o)项;
集合。排序(elems);
用于(桶b:元素){
System.out.println(b.filling.getVolume());
}
}
将打印:

5.0
12.0

真丢脸,我写了整个代码,但阅读这段代码比阅读我能写的糟糕解释更容易理解。

非常感谢!我也尝试使用“Collections.sort()”来提供一个解决方案,我应该在我的问题中指定它。我在这里做了一个类似的事情,它成功了。如果你想让Bucket保持通用,你可以做
类Bucket实现
LinkedList<Bucket> list;
5.0
12.0