0

私は 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);
        }
    }
}
4

1 に答える 1

2

すべてのコレクションクラスで追加の「汎用」機能を使用できるようにする場合は、「ヘルパー」クラスで静的メソッドとして機能を作成するのが正しい方法です。

既存のコレクションクラスの基本クラスにメソッドを追加しても機能しません。それは標準のJavaクラスライブラリを変更することを必要とし、彼らの正しい心の誰もそれをしません。(技術的には可能ですが、コードに移植性の悪夢を生み出すことになります。コードに関連して商標用語「Java」を使用した場合、法的な問題は言うまでもありません。)

于 2012-11-23T12:56:56.783 に答える