7.10.2 Java 7 新增的Objects 类

本文介绍了Java7中新增的Objects工具类的功能及其用途。该类提供了多种用于操作对象的安全方法,例如hashCode(), toString(), 和 requireNonNull()等,能够有效避免空指针异常的发生。


在Java7中新添了一个Objects工具类,它提供了一些方法来操作对象,这些工具方法大多是“空指针”安全的。比如,如果不能明确地判断一个引用变量是否为null,如果调用toString()方法,则可能发生NullPointerException异常;如果使用Objects类提供的toString(Object o)方法,就不会引发空指针异常,当o为null 时,程序将返回一个“null”字符串。下面就是一个Objects工具类的实用安全,代码如下:

 package com.javapp.ch7;

import java.util.Objects;

public class ObjectsTest {

        //定义一个obj变量,默认为null

    static ObjectsTest obj;   

    public static void main(String[] args) {

        //输出一个null对象的hashCode值,输出0

        System.out.println(Objects.hashCode(obj));

        //输出一个null对象的toString,输出null

        System.out.println(Objects.toString(obj));

        //要求obj不能为null,如果为null则引发异常

        System.out.println(Objects.requireNonNull(obj));

    }

}

Objects工具类包含的方法如表7-6所示。

### Java Elasticsearch 工具示例 以下是基于提供的引用内容以及常见实践的一个简单封装工具,适用于 Java 操作 Elasticsearch 数据库。此工具主要实现了基本的操作功能,如插入文档、查询数据、更新文档和删除文档。 #### 1. 添加 Maven 依赖 为了能够正常运行该工具,需先在项目的 `pom.xml` 文件中添加 Elasticsearch 的相关依赖: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.10.2</version> <!-- 版本号可根据实际需求调整 --> </dependency> <!-- 如果使用的是 Spring Boot,则还需要引入以下依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 上述代码片段展示了如何配置项目所需的依赖项[^4]。 --- #### 2. 封装工具实现 以下是一个完整的工具示例,涵盖了常见的 CRUD 操作: ```java import org.apache.http.HttpHost; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; public class ElasticsearchUtil { private static RestHighLevelClient client; // 初始化客户端连接 public static void init() { client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); } // 插入文档 public static void insertDocument(String indexName, String id, Object data) throws Exception { IndexRequest request = new IndexRequest(indexName).id(id).source(data); client.index(request, RequestOptions.DEFAULT); // 执行请求 } // 查询文档 public static boolean getDocument(String indexName, String id) throws Exception { GetRequest getRequest = new GetRequest(indexName, id); return client.exists(getRequest, RequestOptions.DEFAULT); // 判断是否存在 } // 更新文档 public static void updateDocument(String indexName, String id, Object updatedData) throws Exception { UpdateRequest request = new UpdateRequest(indexName, id).doc(updatedData); client.update(request, RequestOptions.DEFAULT); // 执行更新 } // 删除文档 public static void deleteDocument(String indexName, String id) throws Exception { DeleteRequest request = new DeleteRequest(indexName, id); client.delete(request, RequestOptions.DEFAULT); // 执行删除 } // 关闭客户端 public static void close() throws Exception { if (client != null) { client.close(); } } } ``` 上述代码提供了一个基础的工具框架,其中包含了初始化客户端、执行增删改查操作的功能[^3]。 --- #### 3. 使用方法说明 ##### (1)初始化客户端 在程序启动阶段调用 `init()` 方法完成客户端的初始化工作: ```java ElasticsearchUtil.init(); // 启动时调用一次即可 ``` ##### (2)插入文档 向指定索引中插入一条记录: ```java try { MyObject obj = new MyObject(); // 自定义对象实例化 ElasticsearchUtil.insertDocument("my_index", "1", obj); } catch (Exception e) { e.printStackTrace(); } ``` ##### (3)查询文档 判断某条记录是否存在: ```java boolean exists = false; try { exists = ElasticsearchUtil.getDocument("my_index", "1"); } catch (Exception e) { e.printStackTrace(); } System.out.println("Record Exists: " + exists); ``` ##### (4)更新文档 修改已存在的记录字段值: ```java MyObject updatedObj = new MyObject(); // 修改后的对象 updatedObj.setField("newValue"); try { ElasticsearchUtil.updateDocument("my_index", "1", updatedObj); } catch (Exception e) { e.printStackTrace(); } ``` ##### (5)删除文档 移除特定 ID 的记录: ```java try { ElasticsearchUtil.deleteDocument("my_index", "1"); } catch (Exception e) { e.printStackTrace(); } ``` ##### (6)关闭资源 当不再需要访问 Elasticsearch 服务时,记得释放资源: ```java try { ElasticsearchUtil.close(); } catch (Exception e) { e.printStackTrace(); } ``` --- #### 4. 注意事项 - **版本兼容性**:不同版本间的 API 变更较大,请务必确认所使用的 Elasticsearch 和其对应客户端版本一致。 - **异常处理**:生产环境中应增强错误捕获逻辑,并考虑日志记录以便排查问题。 - **性能优化**:批量操作(如 Bulk API)通常能显著提升效率,在高并发场景下推荐优先采用。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值