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归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目