Eclipse supress compiler error - возможен ли обходной путь? - PullRequest
0 голосов
/ 22 июня 2011

Вот сценарий:

У меня есть программа, которая содержит аннотацию, которую я построил в своем проекте Eclipse, она называется 'flag'.У аннотации 'flag' есть элемент 'id'. В моем классе есть метод с именем 'connect', который устанавливает сокет-соединение.Я аннотирую метод подключения, помещая аннотацию 'flag' перед ним и присваивая ему 'id'

public class Foo {
   @flag(id = 'slowConnection')
   public boolean connect() {
      // connect logic here...
   }
}

Теперь, что я в конечном итоге хочу, это что-то вроде следующего

public class Foo {
   @flag(id = 'slowConnection')
   public boolean connect() {
      // connect logic here...
   }

   @flag(id = 'mediumConnection')
   public boolean connect() {
      // medium connection logic here
   }

   @flag(id = 'fastConnection')
   public boolean connect() {
      // fast connection logic here
   }
}

Позвольте мне уточнить здесь.Моя цель - иметь возможность включать только правильный метод connect во время компиляции на основе входного параметра класса.Перегрузка метода - аналогичный способ сделать это, хотя я не хочу менять сигнатуру метода.Я также знаю, что наследование было бы способом сделать это.Затмение (справедливо) жалуется, когда у меня есть приведенный выше код, говоря, что есть дублирующий метод.Есть ли в любом случае, что я мог бы продолжить с вышеупомянутым в Eclipse до Я скомпилирую программу, так как я выполню некоторую логику, чтобы убрать все, кроме одного из методов 'connect' до программа компилируется?Есть ли способ автоматически отключить автокомпиляцию в Eclipse?Любые советы или указатели будут полезны.

1 Ответ

4 голосов
/ 22 июня 2011

Вы перемещаете логику соединения в отдельный интерфейс, а затем используете шаблон фабрики для генерации соответствующего соединения:

public interface IFoo {
   void connect();
}

final class SlowFoo implements IFoo {
  //Implementation for slow connections
} 

final class MediumFoo implements IFoo {
  //Implementation for medium connections
} 

final class FastFoo implements IFoo {
  //Implementation for fast connections
} 

Если у классов общий код, вам следует подумать о введении базового класса, например FooBase.

Тогда фабрика может выглядеть так:

public final class FooFactory {
   public IFoo create() {
      if (Connection.speed < 100) //Fictive value
          return new SlowFoo();
      if (Connection.speed < 1000) //Fictive value
          return new MediumFoo();

      return new FastFoo();
   }
}

Нехорошо разбираться с исходным кодом перед компиляцией, ИМХО.

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