如何避免;“包不存在”;Java中的错误
大家好,我的社区 我目前正在制作一个Java Swing,它为cfd模拟程序执行宏。 问题是,这些宏应该可以在没有swing变量的情况下执行 我目前的解决方案是,注释掉特定的变量,不管它是用于swing还是独立使用,否则我会得到一个“包不存在”错误 这是不好的,因为其他人必须编辑我的代码,这通常会导致desaster(我指的是经验) 例如:如何避免;“包不存在”;Java中的错误,java,swing,import,preprocessor,packages,Java,Swing,Import,Preprocessor,Packages,大家好,我的社区 我目前正在制作一个Java Swing,它为cfd模拟程序执行宏。 问题是,这些宏应该可以在没有swing变量的情况下执行 我目前的解决方案是,注释掉特定的变量,不管它是用于swing还是独立使用,否则我会得到一个“包不存在”错误 这是不好的,因为其他人必须编辑我的代码,这通常会导致desaster(我指的是经验) 例如: double meshsize = 2.5; double prismsize = 0.02; //double meshsize = Wizard.my
double meshsize = 2.5;
double prismsize = 0.02;
//double meshsize = Wizard.myMeshsettings.getmeshsize();
//double prismsize = Wizard.myMeshsettings.getprismsize();
我知道java没有预处理器。由于策略问题,导入虚拟对象也不是解决方案
是否可以检查向导类是否可用,然后才使用向导引用编译部件
礼貌一点,这是我在Stackoverflow上问的第一个问题。简短的回答是:不,没有办法避免java编译器编译整个代码 较长的答案如下 首先,您可以在所有类都可用的情况下编译代码,但要使实现能够工作,即使特定类在运行时不可用。为此使用动态类加载。(查看
Class.forName()
method)
其次,您甚至可以在编译时编写不需要特定类的代码。在动态类加载中另外使用反射
例如,以下代码片段将在不使用类的情况下编译向导
,并在使用或不使用此类的情况下正常工作:
try {
Class clazz = Class.forName("Wizard");
Field myMeshsettingsField = clazz.getDeclaredField("myMeshsettings");
myMeshsettingsField.setAccessible(true);
Object myMeshsettings = myMeshsettingsField.get();
Method getmeshsize = myMeshsettings.getClass().getMethod("getmeshsize");
double meshsize = (Double)getmeshsize.invoke(null);
} catch (ClassNotFoundException e) {
System.out.println("wizard is unavailable");
}
最大的问题是“为什么?”
你为什么需要这个?在没有所需依赖项的情况下编译代码听起来像是糟糕的设计。我建议你对你的任务做一个高层次的解释。然后我们可能会向您建议更好的解决方案 这个问题没有更高层次的解释,它是由于维护问题,例如cfd软件的更新、cfd计算机的新要求或新的几何输入。如果一个几何体被更新,用我目前的设计,我们必须复制粘贴两倍的代码,我们计划制作更多的向导。(谈论300个宏)我认为“以我目前的设计”是关键。这个问题有更高层次的解释。你的问题不包含“geometry”一词,但你的评论包含。到目前为止,你的解决方案相当不错,但是Field类没有方法“getMethod”,因此我没有访问它的权限。考虑过直接进入Meshsettings类,但其中的值没有初始化……知道我如何访问myMeshSettings的数据吗?我们不受这些更改的影响,这些是公司cd adapco的更改和客户的需求,唯一的问题是,我们不希望每次更改宏两次;)看看编辑过的代码。对不起,我弄错了。我直接以SO的形式编写了这段代码,而没有编译它。