Java-интерфейс вместо реализации - PullRequest
0 голосов
/ 20 июня 2011

Я получил метод с заданным параметром:

public static Map<String, String> validationMessages(Set<ConstraintViolation<EditEmailForm>> failures) 

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

public static Map<String, String> validationMessages(Set<ConstraintViolation<Form>> failures) 

теперь в моем контроллере я пытаюсь использовать этот метод следующим образом:

сначала я создаю объект сбоев и выполняю проверку

Set<ConstraintViolation<EditEmailForm>> failures = validator.validate(editEmailForm);

а затем попробуйте передать его методу validationMessages:

return FormUtils.validationMessages(failures);

, но я не могу сделать это так.Какое здесь решение?

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

эта проблема возникает из-за того, что java-generics не являются ковариантными.посмотрите на это для деталей

http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html

подумайте об этом случае.

B расширяет A.

вы вызываете этот метод

void someMethod(Set<A> as) {
    as.add(new A());
}

с помощью

Set<B> bs = new HashSet<B>();

someMethod(bs);

если бы эта компиляция, вы могли бы добавитьА в коллекцию Bs.

Что касается вашей конкретной проблемы.Почему у вас даже есть Form-Class как обобщение ConstraintViolation?

0 голосов
/ 21 июня 2011

Измените объявление в вашем методе на

public static Map<String, String> validationMessages(Set<ConstraintViolation<? extends Form>> failures)

Если это не поможет, дайте более подробную информацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...