《Java工程师必读手册》——Java编程技巧系列——Java编程技巧之输入输出参数(3)

简介: 《Java工程师必读手册》——Java编程技巧系列——Java编程技巧之输入输出参数(3)

接上篇:https://developer.aliyun.com/article/1228185?spm=a2c6h.13148508.setting.17.358c4f0eIHLsiZ


三、 利用方法参数实现

 

本章将从方法参数入手,实现参数的输入输出功能。

 

1. 利用参数类实现

 

理论依据

 

引入参数对象(Introduce Parameter Object):当一个方法的参数超过3个时,就可以考虑将参数封装成一个对象类。将参数封装成对象类后,提高了代码的可读性,并且该参数对象类也可以重用。以后,如果增加或删除参数,方法本身不需要修改,只需要修改参数对象类就可以了。

 

这里,可以利用引入参数对象重构方法,定义一个输入输出参数类,来实现参数的输入输出功能。

 

代码实现

 

/**

* 几何辅助类

*/

public final class GeometryHelper {

 

   /** 原有静态常量 */

   ......

 

   /**

    * 划分线串

    *

    * @param lineString 原始线串

    * @param segmentLengthes 分段长度数组

    * @return 线串数组

    */

   public static LineString[] splitLineString(LineString lineString, double[] segmentLengthes) {

       // 原有计算逻辑

       ......

 

       // 初始化参数值

       Coordinate[] coordinates = lineString.getCoordinates();

       InoutParameter inoutParameter = new InoutParameter(1, coordinates[0]);

       int length = targetLengthes.length;

       LineString[] lineStrings = new LineString[length];

 

       // 添加前面N段

       for (int i = 0; i < length - 1; i++) {

           lineStrings[i] = combineLineString(coordinates, inoutParameter, targetLengthes[i]);

       }

 

       // 添加最后一段

       lineStrings[length - 1] = buildLineString(coordinates, inoutParameter.getIndex(), inoutParameter.getCoordinate());

 

       // 返回线串数组

       return lineStrings;

   }

 

   /**

    * 组装线串

    *

    * @param coordinates 坐标数组

    * @param inoutParameter 输入输出参数

    * @param targetLength 目标长度

    * @return 线串

    */

   private static LineString combineLineString(Coordinate[] coordinates, InoutParameter inoutParameter, long targetLength) {

       // 获取输入参数

       int index = inoutParameter.getIndex();

       Coordinate coordinate = inoutParameter.getCoordinate();

 

       // 添加线串坐标

       ......

 

       // 设置输出参数

       inoutParameter.setIndex(index);

       inoutParameter.setCoordinate(coordinate);

 

       // 返回线串对象

       return buildLineString(coordinateList);

   }

 

   /** 原有静态方法 */

   ......

 

   /**

    * 输入输出参数类

    */

   @Getter

   @Setter

   @ToString

   @NoArgsConstructor

   @AllArgsConstructor

   private static class InoutParameter {

       /** 当前序号 */

       private int index;

       /** 当前坐标 */

       private Coordinate coordinate;

   }

 

}

 

2. 利用单值数组实现

 

理论依据

 

当您将对象引用传递到方法中时,您将得到该对象引用的副本。也就是说,当您将数组引用传递到方法中时,您将得到该数组引用的副本。但是,这两个数组引用都指向同一个数组,当修改副本数组引用中的值时,也能体现到原有数组引用中。

 

利用数组引用的这个特性,可以实现参数的输入输出功能。这里,引入了单值数组的概念,即一个数组只有一个值,用于传递输入输出参数值。

 

代码实现

 

/**

* 几何辅助类

*/

public final class GeometryHelper {

 

   /** 原有静态常量 */

   ......

 

   /**

    * 划分线串

    *

    * @param lineString 原始线串

    * @param segmentLengthes 分段长度数组

    * @return 线串数组

    */

   public static LineString[] splitLineString(LineString lineString, double[] segmentLengthes) {

       // 原有计算逻辑

       ......

 

       // 初始化参数值

       int[] indexHolder = new int[] {1};

       Coordinate[] coordinates = lineString.getCoordinates();

       Coordinate[] coordinateHolder = new Coordinate[] {coordinates[0]};

       int length = targetLengthes.length;

       LineString[] lineStrings = new LineString[length];

 

       // 添加前面N段

       for (int i = 0; i < length - 1; i++) {

           lineStrings[i] = combineLineString(coordinates, indexHolder, coordinateHolder, targetLengthes[i]);

       }

 

       // 添加最后一段

       lineStrings[length - 1] = buildLineString(coordinates, indexHolder[0], coordinateHolder[0]);

 

       // 返回线串数组

       return lineStrings;

   }

 

   /**

    * 组装线串

    *

    * @param coordinates 坐标数组

    * @param indexHolder 序号支撑

    * @param coordinateHolder 坐标支撑

    * @param targetLength 目标长度

    * @return 线串

    */

   private static LineString combineLineString(Coordinate[] coordinates, int[] indexHolder, Coordinate[] coordinateHolder, long targetLength) {

       // 获取支撑取值

       int index = indexHolder[0];

       Coordinate coordinate = coordinateHolder[0];

 

       // 添加线串坐标

       ......

 

       // 设置支撑取值

       indexHolder[0] = index;

       coordinateHolder[0] = coordinate;

 

       // 返回线串对象

       return buildLineString(coordinateList);

   }

 

   /** 原有静态方法 */

   ......

 

}


 接下篇:https://developer.aliyun.com/article/1228182?groupCode=java

 

相关文章
|
1月前
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
22天前
|
Java
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
|
1月前
|
消息中间件 Java 大数据
"深入理解Kafka单线程Consumer:核心参数配置、Java实现与实战指南"
【8月更文挑战第10天】在大数据领域,Apache Kafka以高吞吐和可扩展性成为主流数据流处理平台。Kafka的单线程Consumer因其实现简单且易于管理而在多种场景中受到欢迎。本文解析单线程Consumer的工作机制,强调其在错误处理和状态管理方面的优势,并通过详细参数说明及示例代码展示如何有效地使用KafkaConsumer类。了解这些内容将帮助开发者优化实时数据处理系统的性能与可靠性。
62 7
|
16天前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
57 0
|
22天前
|
缓存 前端开发 Java
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
|
23天前
|
运维 监控 Java
【JVM 调优秘籍】实战指南:JVM 调优参数全解析,让 Java 应用程序性能飙升!
【8月更文挑战第24天】本文通过一个大型在线零售平台的例子,深入探讨了Java虚拟机(JVM)性能调优的关键技术。面对应用响应延迟的问题,文章详细介绍了几种常用的JVM参数调整策略,包括堆内存大小、年轻代配置、垃圾回收器的选择及日志记录等。通过具体实践(如设置`-Xms`, `-Xmx`, `-XX:NewRatio`, `-XX:+UseParallelGC`等),成功降低了高峰期的响应时间,提高了系统的整体性能与稳定性。案例展示了合理配置JVM参数的重要性及其对解决实际问题的有效性。
42 0
|
2月前
|
存储 Java
java 服务 JVM 参数设置配置
java 服务 JVM 参数设置配置
43 3
|
1月前
|
Java 编译器 数据库连接
Java中的无参数构造方法
Java中的无参数构造方法
|
2月前
|
Java 测试技术 Maven
Java编译器注解运行和自动生成代码问题之在编译时需要设置-proc:none参数问题如何解决
Java编译器注解运行和自动生成代码问题之在编译时需要设置-proc:none参数问题如何解决
|
1月前
|
Java
JAVA 获取 URL 指定参数的值
JAVA 获取 URL 指定参数的值
32 0