java - 如何在java中为标准对象编写泛型扩展?

标签 java generics

我是 Java 初学者,我要求告诉我一些关于 Java 编写通用代码的传统。我在下面的代码中编写了帮助程序类,用于将项目推送到通用排序集合中,我想知道它是否被接受?或者我应该扩展一些集合的基类?或者还有其他方式欢迎更多人使用 Java?

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);
        }
    }
}

最佳答案

如果您想为所有集合类提供额外的“通用”功能,那么在“帮助器”类中将该功能编写为静态方法是正确的方法。

将该方法添加到现有集合类的基类中是行不通的。这需要修改标准 Java 类库,但没有一个头脑清醒的人会这样做。 (这在技术上是可行的,但是您将为您的代码带来可移植性的噩梦。如果您在代码中使用商标术语“Java”,更不用说法律问题了。)

关于java - 如何在java中为标准对象编写泛型扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13529225/

相关文章:

java - 仅限消费者的 kotlin 泛型

java - 为什么 Google Guava Multimap.get(Key) 方法不接受对象?

java - Vaadin 将值添加到列表

java - 从 ActionPerformed 方法中重复发出更改 JButton 文本

scala - 为什么 A => String 与 _1.type => String where val _1 : A? 不同

java - 为什么我们不能扩展泛型类型?

java - 是否可以获得通用参数的类?

java - 扫描仪类输入问题

java: 如何使用 printf 打印美元符号和带有 2 位小数的 double ?

java - ORMLite JDBC 连接 MySQL 时出错