Делегаты в Java как в .NET - PullRequest
0 голосов
/ 27 октября 2010

Мне нужно несколько советов относительно подхода в Java, так как делегаты немного отличаются от .NET. Я хотел бы создать несколько интерфейсов, которые имеют одинаковое имя и имя метода, но отличается от них только количеством параметров. Что-то вроде Действия в .NET

Некоторые примеры кода.

На данный момент работает абстрактный класс, реализованный следующим образом.

public abstract class AbstractValidators {

   public <T1> boolean isValid(T1 t1) {
      return false;
   }

   public <T1,T2> boolean isValid(T1 t1, T2 t2) {
      return false;
   }

  //And so one

} 

Тогда в каком-то классе мы можем сделать что-то вроде этого.

public class SomeClass {

 AbstractValidators validateStrVsInter = new AbstractValidators() {

   public <String,Integer> boolean isValid(String t1, Integer t2) { //Don't be fool by colors the String and Integer are only names of generic parameters
         return true;
   }

 };


 public void doStaff() {

   this.validateStrVsInter.<String,Integer>isValid("String", 100); // return true;

 }

}

Это работает, но не является хорошим решением. ИМХО, мне нужно что-то вроде различных интерфейсов, которые могут быть назначены одному ..

 public interface IValidator<T1> {
      public boolean isValid(T1 t);
    }

 public interface IValidator<T1,T2> {
   public boolean isValid(T1 t, T2 t2);
 }

Есть идеи?

EDIT:

Какова цель?

Очень просто иметь возможность изменить определение

isValid(String t1, Integer t2) { }

в

isValid(String t1, Integer t2, Double t3) { }

и в вызове

   validator.isValid("1",2);

до

  validator.isValid("1",2, 3.0);

Без изменения класса импорта и т. Д.

Ответы [ 2 ]

0 голосов
/ 27 октября 2010

Используйте имя пакета в реализации интерфейса.

public class interfaces implements package.a.IValidator, package.b.IValidator
0 голосов
/ 27 октября 2010

Вам известно, что вы можете создать интерфейс, реализующий несколько других интерфейсов, по сути, соединяющих их?

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