Веселье с дженериками Java - PullRequest
1 голос
/ 17 сентября 2009

Кто-нибудь знает, как написать фрагмент кода ниже, используя обобщенные И избегая предупреждений компилятора? (@SuppressWarnings ("unchecked") считается читерством).

И, может быть, проверка с помощью шаблонов, что тип "left" совпадает с типом "right"?

public void assertLessOrEqual(Comparable left, Comparable right) {
    if (left == null || right == null || (left.compareTo(right) > 0)) {
        String msg = "["+left+"] is not less than ["+right+"]";
        throw new RuntimeException("assertLessOrEqual: " + msg);
    }
}

Ответы [ 3 ]

12 голосов
/ 17 сентября 2009

Это также работает с подклассами типов Comparable:

public <T extends Comparable<? super T>> void assertLessOrEqual(T left, T right) {
  if (left == null || right == null || left.compareTo(right) > 0) {
    String msg = "["+left+"] is not less than ["+right+"]";
    throw new RuntimeException("assertLessOrEqual: " + msg);
  }
}
3 голосов
/ 17 сентября 2009

Как насчет этого:

public <T extends Comparable<T>> void assertLessOrEqual(T left, T right) {
  if (left == null || right == null || (left.compareTo(right) > 0)) {
    String msg = "["+left+"] is not less than ["+right+"]";
    throw new RuntimeException("assertLessOrEqual: " + msg);
  }
}

Возможно, можно сделать немного немного более общим, но только сделав его более сложным:)

2 голосов
/ 17 сентября 2009

Вы не можете с помощью общих проверок проверить, совпадает ли тип 'left' с типом 'right' во время выполнения. Обобщение Java реализовано посредством стирания типа 1002 *, поэтому информация о параметрах обобщенного типа теряется во время выполнения.

public <T extends Comparable<T>> void assertLessOrEqual(T left, T right) {
    if (left == null || right == null || (left.compareTo(right) > 0)) {
        String msg = "["+left+"] is not less than ["+right+"]";
        throw new RuntimeException("assertLessOrEqual: " + msg);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...