0

@Thilo のおかげで、私は次のようにインターフェースを狂わせました:

public interface compareOp<T> {
     public boolean compare(T op1, T op2);
}

そして「実装者」:

private static final compareOp<Integer> GreaterThan = new compareOp<Integer>() {
    @Override
    public boolean compare(Integer x, Integer y) {
        if (x > y)
            return true;
        return false;
    }
};
private static final compareOp<Integer> SameThan = new compareOp<Integer>() {
    @Override
    public boolean compare(Integer x, Integer y) {
        if (x == y)
            return true;
        return false;
    }
};
private static final compareOp<Integer> LessThan = new compareOp<Integer>() {
    @Override
    public boolean compare(Integer x, Integer y) {
        if (x < y)
            return true;
        return false;
    }
};

私は比較を行うsomコードを書いていますが、このコードをおろし金に3回必要としますが、コードを複製したくないので、パラメーターcompタイプのコンパレーターを作成してチェックします:

if (comp.compare(output1[i][n1], output2[j][n2]) == 0)

私のコンパレータは、-1,0,1 ルールに違反しているため、通常の並べ替えには使用できませんが、他の目的には使用しません

これは Java ルールに関する悪いスタイルですか?

ここに私のコンパレータのコードがあります:

private static final Comparator<Integer> GreaterThen = new Comparator<Integer>() {
    @Override
    public int compare(Integer x, Integer y) {
        if (x > y)
            return 0;
        return -1;
    }
};
private static final Comparator<Integer> SameThen = new Comparator<Integer>() {
    @Override
    public int compare(Integer x, Integer y) {
        if (x == y)
            return 0;
        if (x > y)
            return 1;
        return -1;

    }
};
private static final Comparator<Integer> LessThen = new Comparator<Integer>() {
    @Override
    public int compare(Integer x, Integer y) {
        if (x < y)
            return 0;
        return 1;
    }
};

それが私がそれらを使用する方法です:

    new Helpers().subSetsCompared(input1, 3, input2, 4, GreaterThen);
    new Helpers().subSetsCompared(input1, 3, input2, 4, SameThen);
    new Helpers().subSetsCompared(input1, 3, input2, 4, LessThen);
4

1 に答える 1

3

それらが「実際の」コンパレータではなく、独自のコードからのみ呼び出す場合は、独自のインターフェイスを定義することもできます。それは私にはよりきれいに思えます。

于 2013-09-20T10:41:35.557 に答える