如何在java中为standart对象编写泛型扩展?
我是一名Java初学者,我想告诉我一些关于Java编写泛型代码的传统的词汇。我在下面的代码中编写了帮助器类,用于将项目推送到通用排序集合中,我想知道它是否被接受?或者我应该扩展一些集合的基类?还是用其他方式来欢迎Java中的更多内容如何在java中为standart对象编写泛型扩展?,java,generics,Java,Generics,我是一名Java初学者,我想告诉我一些关于Java编写泛型代码的传统的词汇。我在下面的代码中编写了帮助器类,用于将项目推送到通用排序集合中,我想知道它是否被接受?或者我应该扩展一些集合的基类?还是用其他方式来欢迎Java中的更多内容 package com.rkovalev.Helper; import java.util.Comparator; import java.util.List; public abstract class ListExtensions { public
package com.rkovalev.Helper;
import java.util.Comparator;
import java.util.List;
public abstract class ListExtensions {
public static <T> void addOnCompare(List<T> collection, T item, Comparator<T> comparator) {
synchronized(collection) {
int i = 0;
int size = collection.size();
if (size == 1) {
int diff = comparator.compare(item, collection.get(0));
switch(diff) {
case 1: i++; break;
default: break;
}
} else {
int range = size - 1;
i = size / 2;
int left = 0;
int right = range;
while(true) {
if (i <= 0) { i = 0; break; }
if (i > range) { i = range; break; }
int diff = comparator.compare(item, collection.get(i));
if (diff == 0) break;
else {
if (diff == -1) right = i;
if (diff == 1) left = i;
int near = i + diff;
if (near < 0) { i = 0; break; }
if (near > range) { i = range + 1; break; }
int diff_near = comparator.compare(item, collection.get(near));
if (diff_near == 0) { i = diff_near; break; }
if (diff_near == diff) {
int step = (right-left)/2;
if (step == 0) step = 1;
switch(diff){
case -1:
right = i;
i = i - step; break;
case 1:
left = i;
i = i + step; break;
}
} else if (diff > diff_near) {
i = near; break;
} else { break; }
}
}
}
collection.add(i, item);
}
}
}
package com.rkovalev.Helper;
导入java.util.Comparator;
导入java.util.List;
公共抽象类ListExtensions{
公共静态void addOnCompare(列表集合、T项、比较器){
已同步(收集){
int i=0;
int size=collection.size();
如果(大小==1){
int diff=comparator.compare(item,collection.get(0));
开关(差分){
案例1:i++;中断;
默认:中断;
}
}否则{
int范围=大小-1;
i=尺寸/2;
int左=0;
int右=范围;
while(true){
如果(i范围){i=range;break;}
int diff=comparator.compare(item,collection.get(i));
如果(差异==0)中断;
否则{
如果(diff==-1)right=i;
如果(diff==1)left=i;
int近=i+diff;
如果(接近<0){i=0;break;}
如果(接近>范围){i=range+1;break;}
int diff_near=comparator.compare(item,collection.get(near));
如果(diff_near==0){i=diff_near;break;}
if(diff_near==diff){
int步=(右-左)/2;
如果(步骤==0)步骤=1;
开关(差分){
案例1:
右=i;
i=i-步进;中断;
案例1:
左=i;
i=i+step;中断;
}
}else如果(diff>diff_near){
i=接近;中断;
}else{break;}
}
}
}
收集。添加(i,项目);
}
}
}
如果您想为所有集合类提供额外的“通用”功能,那么将该功能作为静态方法写入“helper”类是正确的选择
将该方法添加到现有集合类的基类将不起作用。这将需要修改标准Java类库,而头脑正常的人不会这么做。(技术上是可能的,但是你会为代码创建一个可移植性的噩梦。如果你使用了与你的代码相关的商标术语“java”,更不用说法律问题了。如果你要进行代码审查,那么考虑投稿。