小编Fle*_*eon的帖子

在编译时有条件地删除Java方法

我试图实现类似于C#预处理器的东西.我知道Java没有相同的预处理器功能,并且我知道有很多方法可以使用Factory等设计模式来实现类似的结果.但是,我仍然有兴趣找到这个问题的解决方案.

目前,我所做的是创建一个包含几个静态最终布尔属性的类,例如以下示例:

public class Preprocessor
{
  public static final boolean FULLACCESS = false;
}
Run Code Online (Sandbox Code Playgroud)

然后我以下列方式使用它:

public ClassName getClassName()
{
    if(Preprocessor.FULLACCESS)
    {
        return this;
    }
    else
    {
        return this.DeepCopy();
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这很好,这解决了我的问题(上面的例子是微不足道的,但我确实在其他有用的情况下使用它).我的问题是,是否有办法将条件置于整个方法周围,以便在给定正确的"预处理器"变量的情况下方法本身不可用?例如,我希望能够使特定的构造函数仅适用于给定"完全访问"的包,如下所示:

public ClassName()
{
    // do things
}

if(FULLACCESS)
{
public ClassName(ClassName thing)
{
    // copy contents from thing to the object being created
}
}
Run Code Online (Sandbox Code Playgroud)

我再次意识到Java作为一种语言的局限性(或设计决策),并且我知道在大多数情况下这是不必要的.事实上,我已经考虑过简单地创建这些"额外"方法并将它们的整个代码放在条件中,同时如果条件不活动则抛出异常,但这是一个非常粗略的解决方案似乎没有用处当我向他们提供这些库时,我的程序员.

非常感谢您提前寻求帮助.

编辑:

为了补充这个问题,我试图这样做的原因是,通过使用异常作为解决方案,IDE实际上不会将方法显示为"可用".然而,再一次,它可能仅仅是我对Java的无知.

我想要这样做的原因主要是因为我可能有多个公共接口可用,例如,一个限制性,其中控制在方法中更严格,另一个允许直接改变属性.但是,我也希望能够从.class中主动删除部分代码,例如,在某些变体不可用的产品线开发方法中.

EDIT2:

此外,重要的是要注意我也将有条件地生成文档.因此,每个编译版本的软件包都有自己的文档,只包含实际可用的文档.

java preprocessor processor conditional-compilation

11
推荐指数
2
解决办法
763
查看次数