2013-09-20 3 views
0

Благодаря @Thilo я с ума интерфейс, как это:Использует компаратор «offtopic» плохой стиль java?

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

У меня есть writte сом код, где я делаю я сравнительная нужен этот код три раза для терки, равно меньше, но я не хотел, чтобы дублировать код так, я сделал параметр аккомпанемент типа компаратор и проверить:

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); 
+5

Если вы обеспокоены стилем, вы также можете использовать слово «чем» вместо «затем». – rid

+0

Хорошая точка i будет реорганизовать это;) – user2792876

+0

Я не уверен, что понимаю - с вашими компараторами GreaterThan и LesserThan, 'compare (x, x);' возвращает -1: вы действительно этого хотите? Вы должны дать больше информации о том, почему вы это делаете, потому что, вероятно, лучший способ. – assylias

ответ

3

Если те не «реальные» компараторы, и вы только назвать их собственные кода, то вы также можете определить свой собственный интерфейс. Это кажется мне более чистым.

+0

+1 Совершенно верно. Нарушение контракта - плохая идея. Просто создайте свой собственный контракт. –

+1

Я сделаю так, не думал об этом, я переписываю компаратор, за исключением того, что я называю его myCompare и могу использовать boolean вместо sgn – user2792876

+1

Назовите его 'BinaryPredicate'. –

Смежные вопросы