Eclipse抑制编译器错误 - 是否有可能解决?

时间:2011-06-22 11:43:53

标签: java eclipse annotations

以下是该方案:

我有一个程序,其中包含我在我的eclipse项目中构建的注释,它被称为'flag'。 'flag'注释具有'id'元素 我的类中有一个名为'connect'的方法,它建立了一个套接字连接。 我通过在它之前放置'flag'注释并给它一个'id'

来注释connect方法
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(这是正确的)抱怨我有上面的代码,说有一个重复的方法。无论如何,我可以在Eclipse 之前继续上面的 我编译程序,因为我将执行一些逻辑来删除除“连接”方法之外的所有方法<在之前 编译程序?有没有办法在eclipse中自动禁用自动编译?任何提示或指示都会有所帮助。

1 个答案:

答案 0 :(得分:4)

将连接逻辑移动到单独的接口,然后使用工厂模式生成适当的连接:

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();
   }
}

在编译之前搞乱源代码并不是一个好主意恕我直言。