| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| // |
| |
| = NetBeans IDE 中的标注处理程序支持 - 第一部分:使用 Project Lombok |
| :jbake-type: tutorial |
| :jbake-tags: tutorials |
| :jbake-status: published |
| :icons: font |
| :syntax: true |
| :source-highlighter: pygments |
| :toc: left |
| :toc-title: |
| :description: NetBeans IDE 中的标注处理程序支持 - 第一部分:使用 Project Lombok - Apache NetBeans |
| :keywords: Apache NetBeans, Tutorials, NetBeans IDE 中的标注处理程序支持 - 第一部分:使用 Project Lombok |
| |
| image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0"] |
| |
| |
| * *使用支持定制标注的 Project Lombok* |
| |
| 为了演示定制标注如何在 NetBeans IDE 内正常工作,我们将使用 Project Lombok,它提供了自动生成多个 Java 代码元素(如 getter、setter 以及构造函数等)的便捷方式。有关其功能的详细信息,请访问 link:http://projectlombok.org/[+Project Lombok 网站+]。但是,请记住,Project Lombok 包含一些可能无法在所有开发环境中正常工作的功能。 |
| |
| *要学完本教程,您需要具备以下软件和资源。* |
| |
| |=== |
| |软件或资源 |要求的版本 |
| |
| |link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.2, 7.3, 7.4, 8.0 |
| |
| |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发工具包 (JDK)+] |版本 7 或 8 |
| |
| |link:http://code.google.com/p/projectlombok/downloads/list[+lombok.jar+] |v1.12.4 或更新版本 |
| |=== |
| |
| |
| == 创建新的 Java 项目 |
| |
| 在本练习中,将创建一个简单的 Java 项目,以及名为 ``MyBooks.java`` 的类,用于在操作中演示标注。 |
| |
| 1. 从主菜单中选择 *File > New Project*(文件 > 新建项目)以打开新建项目向导。 |
| 2. 在 "Java" 类别中选择 "Java Application"(Java 应用程序)项目类型。单击 "Next"(下一步)。 |
| 3. 在向导的 "Name and Location"(名称和位置)页中,键入 * ``TestAnn`` * 作为项目名称。 |
| 4. 在 "Create Main Class"(创建主类)字段中键入 * ``testann.TestBooks`` *,以替换默认的类名。单击 "Finish"(完成)。 |
| image::images/newproj.png[title="在 NetBeans IDE 中创建新 Java 项目"] |
| |
| 单击 "Finish"(完成),此时 IDE 将创建 Java 应用程序项目,并在编辑器中打开 ``TestBooks.java`` 类。您可以看到,新项目现在显示在 "Projects"(项目)窗口中,并且 ``TestBooks.java`` 类位于 "Source Packages"(源包)节点下的 ``testann`` 包中。 |
| |
| |
| |
| . 在 "Projects"(项目)窗口中,右键单击 ``testann`` 包节点,然后选择 "New"(新建)> "Java Class"(Java 类)。 |
| |
| |
| . 键入 * ``MyBooks`` * 作为类名,并确认将在 ``testann`` 包中创建类。单击 "Finish"(完成)。 |
| |
| 单击 "Finish"(完成)后,IDE 将在编辑器中打开新类。 |
| |
| |
| |
| . 在源代码编辑器中,将以下三个字段添加到 ``MyBooks.java`` 中。 |
| |
| [source,java] |
| ---- |
| |
| package testann; |
| |
| public class MyBooks { |
| *private int year; //fields |
| private String title; |
| private String author;* |
| |
| } |
| ---- |
| |
| |
| . 将插入光标放在类声明中,然后按 Ctrl-空格组合键,以调用编辑器的代码完成支持。 |
| |
| |
| . 在代码完成列表中选择 ``MyBooks (int year, String title, String author) - generate`` (MyBooks (int year, String title, String author) - 生成),以生成 ``MyBooks.java`` 的构造函数。 |
| image::images/generate-constructor.png[title="用于生成构造函数的代码完成功能"] |
| |
| |
| . 保存所做的更改。 |
| |
| |
| == 为项目启用定制标注 (lombok.jar) |
| |
| 在本练习中,将修改项目的 "Properties"(属性)窗口,以便将库添加到项目的类路径中,并在编辑器中启用标注处理功能。 |
| |
| 1. 下载 link:http://code.google.com/p/projectlombok/downloads/list[+lombok.jar+] 文件并将其保存在系统上。 |
| 2. 右键单击 ``TestAnn`` 项目节点,然后选择 "Properties"(属性)。 |
| 3. 在 "Project Properties"(项目属性)对话框中,选择 "Libraries"(库)类别。 |
| 4. 单击 "Compile"(编译)标签中的 "Add JAR/Folder"(添加 JAR/文件夹),找到您已下载的 ``lombok.jar`` 文件。 |
| image::images/properties1.png[title=""Properties"(属性)窗口中的 "Libraries"(库)类别"] |
| |
| 在 "Compile"(编译)标签上添加的资源对应于 link:http://download.oracle.com/javase/6/docs/technotes/tools/windows/javac.html#options[+Java 编译器+]的 ``-classpath`` 选项。鉴于 ``lombok.jar`` 是一个同时包含标注定义和标注处理程序的单一 JAR 文件,您应该在 "Compile"(编译)标签中将其添加到项目的类路径中。 |
| |
| |
| |
| . 在 "Project Properties"(项目属性)窗口中,选择 "Compiling"(编译)类别。 |
| |
| |
| . 确认选中了 "Enable Annotation Processing"(启用标注处理)复选框(默认为启用),然后选择 "Enable Annotation Processing in Editor"(在编辑器中启用标注处理)复选框。 |
| image::images/properties2.png[title=""Properties"(属性)窗口中的 "Compiling"(编译)类别"] |
| |
| "Enable Annotation Processing"(启用标注处理)复选框使构建和编译项目期间可以进行标注处理。如果未选中该复选框,则会将 ``-proc:none`` 选项传递给 Java 编译器,因此,编译时不进行任何标注处理。因此,如果要处理代码中的标注,则必须选中 "Enable Annotation Processing"(启用标注处理)复选框。 |
| |
| 通过选中 "Enable Annotation Processing in Editor"(在编辑器中启用标注处理)复选框,可在编辑器中查看标注处理结果。标注处理程序生成的其他任何工件(类、方法、字段等)均会显示在 IDE 编辑器中,并且可用于代码完成、导航器、跳转类型、查找使用实例等。 |
| |
| |
| |
| . 在 "Project Properties"(项目属性)窗口单击 "OK"(确定),返回到 ``MyBooks.java`` 文件。 |
| |
| 如果在 "Projects"(项目)窗口中展开 "Libraries"(库)节点,则可以看到 ``lombok.jar`` 现在被列为项目库。 |
| |
| image::images/projects-window.png[title=""Projects"(项目)窗口中的 "Libraries"(库)节点"] |
| |
| |
| == 编写使用 Lombok 定制标注的应用程序 |
| |
| 1. 在 ``MyBooks.java`` 文件的 ``MyBooks`` 类声明前键入 ``@Data`` 。 ``@Data`` 是一个为以下 Java 类生成样板代码的标注:所有字段的 getter、非最终字段的 setter 以及与调用该类字段相应的 ``toString`` 、 ``equals`` 和 ``hashCode`` 实现。 |
| |
| 要了解有关 Project Lombok 支持的标注的详细信息,请参见 Lombok 的link:http://projectlombok.org/features/index.html[+功能概述+]。 |
| |
| |
| |
| . 单击编辑器左旁注中的提示,然后为 ``lombok.Data`` 添加 import。 |
| image::images/import-lombok.png[title="编辑器中导入 lombok 的提示"] |
| |
| 编辑器中的生成代码应该类似于下面的示例。 |
| |
| |
| [source,java] |
| ---- |
| |
| package testann; |
| |
| import lombok.Data; |
| |
| |
| @Data |
| public class MyBooks { |
| |
| private int year; //fields |
| private String title; |
| private String author; |
| |
| public MyBooks(int year, String title, String author) { |
| this.year = year; |
| this.title = title; |
| this.author = author; |
| } |
| } |
| ---- |
| |
| 注:已生成所需的代码工件(如 getter、setter、toString 等),并且可以在 "Navigator"(导航器)窗口中看到它们。 ``@Data`` 标注生成了典型类所需的所有样板代码。 |
| |
| image::images/nav.png[title="显示项目成员的 "Navigator"(导航器)窗口"] |
| |
| 还可以调用代码完成窗口(Ctrl-空格键),然后查看生成的工件是否可供选择。现在,我们看到项目已编译,生成的工件可以通过程序的其他部分调用。 |
| |
| |
| |
| . 打开包含 _main_ 方法的 ``TestBooks.java`` 文件,并添加下面的代码(粗体)以创建 ``MyBooks`` 类的新对象。 |
| |
| [source,java] |
| ---- |
| |
| package testann; |
| |
| public class TestBooks { |
| |
| public static void main(String[] args) { |
| *MyBooks books = new MyBooks(2009, "My Beautiful Dream", "John Smith");* |
| } |
| } |
| ---- |
| |
| |
| . 添加以下代码,以输出 ``books`` 变量的值。 |
| |
| 要返回值,我们调用 ``lombok.jar`` 自动生成的 getter 方法。键入时,请注意代码完成窗口是否提供了自动生成的工件。 |
| |
| |
| [source,java] |
| ---- |
| |
| package testann; |
| |
| public class TestBooks { |
| |
| public static void main(String[] args) { |
| MyBooks books = new MyBooks(2009, "My Beautiful Dream", "John Smith"); |
| *System.out.println("Year: " + books.getYear() + ", Title: " + books.getTitle() + ", Author: " + books.getAuthor());* |
| } |
| } |
| ---- |
| |
| |
| . 保存所做的更改。 |
| |
| |
| . 在 "Projects"(项目)窗口中,右键单击项目节点,然后选择 "Run"(运行)(F6 键)。 |
| |
| 运行应用程序时,应会显示以下输出,说明应用程序编译成功。 |
| |
| image::images/output.png[title="运行应用程序之后的 "Output"(输出)窗口"] |
| |
| 您可以看到,Lombok 标注处理程序生成的工件可以从程序的其他部分访问。 |
| |
| |
| == 后续步骤 |
| |
| * Java SE 文档 - link:http://download.oracle.com/javase/6/docs/technotes/guides/language/annotations.html[+标注+] |
| * Java SE 教程 - link:http://download.oracle.com/javase/tutorial/java/javaOO/annotations.html[+标注+] |
| link:/about/contact_form.html?to=3&subject=Feedback:%20Using%20the%20Annotation%20Processors%20Support%20in%20NetBeans%20IDE[+发送有关此教程的反馈意见+] |