Java eclipse中创建项目以后缺省包和命名的包有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java eclipse中创建项目以后缺省包和命名的包有啥区别?相关的知识,希望对你有一定的参考价值。

这里三个项目都是同一个方法新建的,为什么前两个出现了缺省包,最后一个包是命名过的?有什么区别呢?

并没有实质上的区别,但是实际编码中需要进行包命名规范,否则全部的类都在一个缺省包中,维护性非常之低,而且很有可能类名冲突

包的作用
1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
3 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
java使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。
参考技术A 缺省包,其实就是没有包。。打开里面的java文件,第一行就没有package XXX;这行东西

一般建议要把源代码放到包里面,以后遇到一个工程需要很多java文件时候就需要按照一定的规范把类似功能的java文件放到相同的包里面了。
参考技术B 因为你第三个新建了包,想第一、二个,在没建包的情况下,不显示缺省包,可以同包资源管理器中的filter去做设置

看类文件,多了个包的路径
多了个 package XXX.xXX本回答被提问者采纳

在 Magnolia CMS 中创建 Java 模型

【中文标题】在 Magnolia CMS 中创建 Java 模型【英文标题】:Creating Java models in Magnolia CMS 【发布时间】:2020-03-11 13:08:12 【问题描述】:

我使用 maven 安装了 Magnolia,并成功构建和部署了项目。我还可以创建 yaml 模板和组件。

我想创建 Java 模型来访问外部数据库并添加业务逻辑,但找不到在哪里创建类,并且该领域的文档并不广泛。

在 Netbeans IDE 中,项目树中没有 src 目录。当我创建一个包和一个 jave 类时,我在 tomcat 中得到一个错误:

问题详情:由于缺少类而无法解析类属性:[newpackage.NewClass]

我应该在哪里创建类?

更新:

我在一个单独的 Java 项目中创建了这些类,并在 web-inf/lib 中放置了一个 jar。 现在我没有得到缺少的类错误,而是得到一个渲染转换错误

类:

package com.example;
public class NewClass  

    public String getText() 
       return "Hello Magnolia!";
    


YAML:

modelClass: com.example.NewClass

模板:

<h1>$model.getText()</h1>

错误:

RenderException: java.lang.ClassCastException: com.example.NewClass 无法转换为 info.magnolia.rendering.model.RenderingModel

更新 2:

我修改了类以将 magnolia RenderingModelImpl 扩展为:

package com.example;

import info.magnolia.module.templating.RenderingModel;
import info.magnolia.module.templating.RenderingModelImpl;
import info.magnolia.rendering.template.configured.ConfiguredTemplateDefinition;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;

public class NewClass extends RenderingModelImpl 

    public NewClass(Node content, ConfiguredTemplateDefinition definition, RenderingModel<?> parent) throws PathNotFoundException, RepositoryException 
        super(content, definition, parent);
    

    public static String getText() 
        return "Hello World!";
    


现在构造函数中的super语句不编译显示和报错:

incompatible types: Node cannot be converted to Content

【问题讨论】:

【参考方案1】:

请查看以下文档页面: https://documentation.magnolia-cms.com/display/DOCS61/How+to+use+Magnolia+Maven+archetypes

在那里你会找到关于 Maven 原型的信息,还有一个关于如何创建自定义 java 模块的部分。创建后,您还必须将其添加到您的网络应用中。

改版后: 原来你试图注入一个你需要扩展的模型类 RenderingModelImpl 在您尝试分配的特定模型类中。

干杯,

【讨论】:

我尝试将模块制作为常规 jar 以及由 maven archetype magnolia-module 生成的 jar,但我仍然无法在模板中包含自定义类,出现以下错误并且有文档站点上没有示例:RenderException: java.lang.ClassCastException: package.className cannot be cast to info.magnolia.rendering.model.RenderingModel 可以分享一下课程吗? 我编辑了原始问题并添加了课程。 你必须在运行时将 RenderingModelImpl 类扩展为它知道它是 modelClass 的一个实例 我扩展了 RenderingModelImpl,现在在构造函数上收到错误。我用我的代码更新了原始问题。【参考方案2】:

我在 github 上的 this link 找到了一个工作示例,并从那里对其进行了修改。以下 Java 模型工作正常并返回了我可以渲染的字符串:

package com.example;

import info.magnolia.rendering.model.RenderingModel;
import info.magnolia.rendering.model.RenderingModelImpl;
import info.magnolia.rendering.template.RenderableDefinition;


import javax.inject.Inject;
import javax.jcr.Node;



public class NewClass<RD extends RenderableDefinition> extends RenderingModelImpl 

    @Inject
    public NewClass(Node content, RD definition, RenderingModel<?> parent) 
        super(content, definition, parent);

    

    @Override
    public String execute() 
        return super.execute();
    

    public String getName() 
    return "Hello Magnolia!";
    

【讨论】:

以上是关于Java eclipse中创建项目以后缺省包和命名的包有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA程序导入eclipse的简易教程

191.7.2 在eclipse中创建Java项目

我可以在eclipse中创建包内的文件夹吗?

Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目

为啥我在eclipse中创建的jsp项目,没有Java Resources这个文件夹

在Eclipse中创建一个ABAP项目