gpt4 book ai didi

java - 如何修剪 Java 程序

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:15 25 4
gpt4 key购买 nike

让我从我想做的事情开始,然后提出一些我有的问题。

我想开发一个通用的 Java 程序,它是许多程序的超集(我们称它们为程序变体)。特别是,通用程序具有仅由一个或多个程序变体(但不是全部)使用的方法。给定一个特定的配置,我想删除不必要的方法,只为一个程序变体保留最小的方法集。

例如,我有一个通用的程序如下:

public class GeneralProgram {

// this method is common for all variants
public void method1() {};

// this method is specific to variant 1
public void method2() {};

// this method is specific to variant 2
public void method3() {};
}

然后根据变体1的配置对程序进行剪枝后,结果为

public class GeneralProgram {

// this method is common for all variants
public void method1() {};

// this method is specific to variant 1
public void method2() {};
}

生成的类名是否与原始类名相同并不重要。我只是想修剪类的内容。

所以,这是我的问题:

  1. 除了低级文本处理之外,您是否知道如何实现这一点?

  2. 我知道我可以使用 aspectJ 在运行时禁用/启用特定方法,但我真正想做的是在部署程序之前执行此任务。 Java 中是否有用于此目的的任何技术?

最佳答案

在我看来,这里正确的解决方案是使用一些面向对象的编程并对程序进行分层:

base.jar 包含:

package foo.base;
class GeneralProgram {
public void method1(){ }
}

var1.jar 包含:

package foo.var1;
import foo.base.GeneralProgram;
class GeneralProgramVar1 extends GeneralProgram {
public void method2(){ }
}

var2.jar 包含:

package foo.var2;
import foo.base.GeneralProgram;
class GeneralProgramVar2 extends GeneralProgram {
public void method3(){ }
}

一些部署将同时具有 base.jar 和 var1.jar,其他部署将具有 base.jar 和 var2.jar。您将不得不稍微修改类路径以解决依赖关系。


如果您可以很好地分离您的变体,以便真正有未使用的功能,那么您可以使用压缩实用程序,如 ProGuard从类中删除未使用的方法。但是,您可能会发现,获得 ProGuard 的好处所需的努力与我在上面推荐的结构相同。

关于java - 如何修剪 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6393645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com