【问题标题】:How to avoid "package does not exist" Error in Java如何避免Java中的“包不存在”错误
【发布时间】:2014-12-18 00:04:53
【问题描述】:

你好 StackOverflow 社区,

我目前正在制作一个执行 cfd 模拟程序的宏的 Java Swing。 问题是,这些宏应该可以在没有摆动变量的情况下执行。

我目前的解决方案是,注释掉特定变量,无论是用于摇摆还是独立使用,否则我会收到“包不存在”错误。

这很糟糕,因为其他人必须编辑我的代码,这通常会导致灾难(我说的是经验)。

例如:

double meshsize = 2.5;
double prismsize = 0.02;

//double meshsize = Wizard.myMeshsettings.getmeshsize();
//double prismsize = Wizard.myMeshsettings.getprismsize();

我知道 java 没有预处理器。由于政策问题,导入虚拟对象也不是解决方案。

是否有可能检查向导类是否可用,然后才使用向导参考编译部件?

对我有礼貌,这是我在 Stackoverflow 上提出的第一个问题。

【问题讨论】:

    标签: java swing import preprocessor packages


    【解决方案1】:

    简短的回答是:不,没有办法避免 java 编译器编译整个代码。

    更长的答案如下。

    首先,您可以在所有类都可用时编译代码,但即使特定类在运行时不可用,也可以使实现工作。为此使用动态类加载。 (看看Class.forName() 方法)。

    其次,您甚至可以编写在编译时不需要特定类的代码。在动态类加载中额外使用反射。

    例如,以下代码片段将在没有类 Wizard 的情况下编译,并且无论有没有这个类都可以正常工作:

    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 个宏)
    • 我认为“我目前的设计”是这里的关键。问题确实有更高层次的解释。您的问题不包含“几何”一词,但您的评论包含。
    • 到目前为止,您的解决方案非常好,但是字段类没有方法“getMethod”,因此我无法访问它。想过直接进入 Meshsettings 类,但那里的值没有初始化.....知道我如何访问 myMeshSettings 的数据吗?
    • 我们不受这些变化的影响,那些是cd-adapco公司的变化和我们客户的需求,唯一的问题是我们不想为每个宏更改两次我们有改变;)
    • 查看已编辑的代码。抱歉,是我的错。我直接用SO形式写了这段代码,没有编译。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多