【问题标题】:Codemodel does not generate static importCodemodel 不生成静态导入
【发布时间】:2015-03-09 22:38:36
【问题描述】:

JCodeModel 生成一个import 语句来代替import static。例如,我有一个具有 import nz.co.cloudm.cloudserv.api.pojos.core.file.attachment.Attachment.Status 而不是 import static nz.co.cloudm.cloudserv.api.pojos.core.file.attachment.Attachment.Status 的类,因此编译器会引发错误。 Status 类是一个内部枚举,它位于 Attachment 类中,正如您在 import 语句中看到的那样。

你知道我有什么方法可以使用代码模型实现导入静态吗?

否则如何让成员使用类限定名?

private nz.co.cloudm.cloudserv.api.pojos.core.file.attachment.Attachment.Status status;

【问题讨论】:

    标签: java sun-codemodel


    【解决方案1】:

    我不确定 codemodel 是否能够定义静态导入,因为它是一个较旧的库。您可以通过 ref() 方法使用枚举,因为静态导入实际上只是为了方便程序员:

    public class Tester {
    
        public enum Status{
            ONE, TWO;
        }
    
        public static void main(String[] args) throws JClassAlreadyExistsException, IOException {
            JCodeModel codeModel = new JCodeModel();
    
            JClass ref = codeModel.ref(Status.class);
    
            JDefinedClass outputClass = codeModel._class("Output");
    
            outputClass.field(JMod.PRIVATE, ref, "status", ref.staticRef(Status.ONE.name()));
    
            codeModel.build(new StdOutCodeWriter());
        }
    }
    

    输出:

    public class Output {
        private test.Tester.Status status = test.Tester.Status.ONE;
    }
    

    【讨论】:

    • 那行解决了我的问题:JClass ref = codeModel.ref(qualified class name);类引用根据我的需要和您展示的那样创建成员,因此不再需要导入静态语句。谢谢!
    • 太棒了!与使用 .staticRef() 相比,引用特定枚举值 (Status.ONE) 可能有更好的方法。
    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 2023-03-15
    • 2011-05-22
    • 1970-01-01
    • 2013-05-11
    • 2013-03-30
    • 2015-09-02
    • 1970-01-01
    相关资源
    最近更新 更多