2013-10-10 6 views
0

У меня есть интерфейс:типа Проверки общего класса

public interface IValidator<E extends IEntity> 
{ 
    void validate(final E entity); 
} 

Я хотел бы создать класс ValidatorService, что-то вроде этого:

public class ValidatorService 
{ 
    private List<IValidator<IEntity>> validators; 


    public void validate(IEntity e) 
    { 
     for(IValidator<IEntity> validator : this.validators) 
     { 
      //if(instanceof)??? 
      validator.validate(e); 
     } 
    } 
} 

Как я могу убедиться, что валидаторы применяются только к их соответствующим классам (см. «???» в коде)? I.e .: Если у нас есть сущность типа EntityA, то будет активирован только валидатор-валидатор? Я думаю, что мне не хватает знаний о дженериках. Спасибо.

+0

java выдаст исключение, если один из валидаторов не реализует IValidator – RamonBoza

+0

. Все валидаторы реализуют Ивалидатор, но тогда некоторые из них должны запускаться для определенных IEntities ... – FazoM

ответ

4

Из-за стирания типа это невозможно.

Вместо этого вы можете добавить метод Class<E> getEntityClass() к интерфейсу.

+0

привет, спасибо за это. Я сделал то, что вы предлагаете, но теперь у меня возникла следующая проблема: «Класс entityClass = validator.getEntityClass(); if (e instanceof entityClass) 'error: "entityClass не может быть разрешен для типа" Как использовать метод getEntityClass? Thx – FazoM

+2

@fazomisiek: Поскольку у вас есть экземпляр класса, а не тип, вы должны называть 'isInstanceOf()'. – SLaks

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