Java EclipseSuperss编译器错误-有可能的解决方法吗?

Java EclipseSuperss编译器错误-有可能的解决方法吗?,java,eclipse,annotations,Java,Eclipse,Annotations,以下是场景: 我有一个程序,其中包含一个我在eclipse项目中构建的注释,称为“flag”。 “flag”批注具有“id”元素 我的类中有一个名为“connect”的方法,用于建立套接字连接。 我通过在connect方法之前放置'flag'注释并给它一个'id'来对其进行注释 public class Foo { @flag(id = 'slowConnection') public boolean connect() { // connect logic here..

以下是场景:

我有一个程序,其中包含一个我在eclipse项目中构建的注释,称为“flag”。 “flag”批注具有“id”元素 我的类中有一个名为“connect”的方法,用于建立套接字连接。 我通过在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(正确地说)抱怨说有一个重复的方法。在编译程序之前,我是否可以在Eclipse中继续执行上述操作,因为在编译程序之前,我将执行一些逻辑,除去除一个之外的所有“connect”方法?有没有办法在eclipse中自动禁用自动编译?任何提示或指针都会有帮助

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

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< /Cord>>

工厂可能会这样:

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();
   }
}
公共最终类工厂{
公共ifoocreate(){
if(Connection.speed<100)//虚拟值
返回新的SlowFoo();
if(Connection.speed<1000)//虚拟值
返回新的MediumFoo();
返回新的FastFoo();
}
}

编译前乱搞源代码不是一个好主意。

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

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< /Cord>>

工厂可能会这样:

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();
   }
}
公共最终类工厂{
公共ifoocreate(){
if(Connection.speed<100)//虚拟值
返回新的SlowFoo();
if(Connection.speed<1000)//虚拟值
返回新的MediumFoo();
返回新的FastFoo();
}
}

在编译之前乱搞源代码不是一个好主意。

这里不需要注释。根据答案,这可以在纯Java中完成。如果您希望在编译时使用依赖项注入而不是工厂(请参见下面的答案),并使用属性文件指定要注入的连接类型。@Tnem您能详细说明一下吗?这里不需要注释。根据答案,这可以在纯Java中完成。如果您希望在编译时使用依赖项注入而不是工厂(请参见下面的答案),并使用属性文件指定要注入的连接类型。@Tnem您能详细说明一下吗?好文章,我喜欢这个示例。然而,我希望看看我是否能用我现有的方法工作。是否可以在eclipse中禁用自动编译,以便在编写代码时,在请求代码编译之前不会出现错误?您可以尝试设置“Window-Preferences-Java-Editor-Report problems as you type”。但是,我仍然不建议您因为这种难看的语法而放弃整个项目的语法检查。只要编写Java并利用它提供的可能性:-)我想这就是我需要的。该设置将禁用错误,直到用户点击保存。谢谢你的帮助好帖子,我喜欢这个例子。然而,我希望看看我是否能用我现有的方法工作。是否可以在eclipse中禁用自动编译,以便在编写代码时,在请求代码编译之前不会出现错误?您可以尝试设置“Window-Preferences-Java-Editor-Report problems as you type”。但是,我仍然不建议您因为这种难看的语法而放弃整个项目的语法检查。只要编写Java并利用它提供的可能性:-)我想这就是我需要的。该设置将禁用错误,直到用户点击保存。谢谢你的帮助