假设我有这个重要的方法:

int generateId(int clientCode, int dataVersion) {

return clientCode * 2 + dataVersion % 2;

}

这两个参数都是int,因此使用错误的参数调用此方法非常容易,例如generateId(dataVersion,clientCode).它将被成功编译和执行.但生成的id将完全错误,这可能会导致严重的问题.

所以,我的问题是:有没有办法保护自己免受这种参数错位?

现在我只能想到将它改为int包装类,如:

int generateId(@Nonnull ClientCode clientCode, @Nonnull Version version) {

return clientCode.getValue() * 2 + version.getValue() % 2;

}

static class IntWrapper {

private final int value;

IntWrapper(int value) {

this.value = value;

}

public int getValue() {

return value;

}

}

static class ClientCode extends IntWrapper {

ClientCode(int value) {

super(value);

}

}

static class Version extends IntWrapper {

Version(int value) {

super(value);

}

}

并使用generateId(new ClientCode(clientCode),new Version(version))调用它.当然,它不能保证完全的保护,但至少它以这种方式更透明.

有没有更好的/其他方式?

java错位_java – 如何保护自己免受参数错位的影响相关推荐

  1. java形式参数_java中形式参数与实际参数是什么

    java中形式参数与实际参数是什么 发布时间:2020-05-06 11:09:19 来源:亿速云 阅读:971 作者:小新 java中形式参数与实际参数是什么?相信有很多人都不太了解,今天小编为了让 ...

  2. Java继承_Java面试题总结(一)

    1.JDK和JRE有什么区别? JDK:Java 的开发工具包,提供了 Java 的开发环境和运行环境 JRE:Java 的运行环境,为 Java 的运行提供了所需环境 具体来说:JDK 其实包含了 ...

  3. 浪涌保护器:保护电子设备免受雷击侵害

    引言: 随着电子设备在现代生活和工业领域的普及和广泛应用,雷击对电子设备的损害成为一个严重的问题.浪涌保护器作为一种重要的防雷设备,发挥着至关重要的作用.本文将介绍浪涌保护器的防雷作用.行业应用,并重 ...

  4. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  5. 【译】保护 Consul 在特定设置中免受 RCE 风险的影响

    2018年11月27日 Consul 团队 介绍 我们最近注意到了一组恶意软件,它们主要针对具有允许远程执行代码这一特定配置的 Consul nodes . 我们的社区成员也 (负责任地) 报告了此恶 ...

  6. Java虚拟机5:常用JVM命令参数

    这里汇总一些平时用到的.看到的一些虚拟机参数: (1)-Xms20M 表示设置堆容量的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置堆容量的最大值为20M,必须以M为单位.将-Xmx和 ...

  7. java canonicalize_java.io.IOException:java.io.WinNTFileSystem.canonicalize0处的无效参数

    我正在使用Eclipse Mars和Tomcat v8.0.30,jre 1.8.0_73.昨天我没有任何问题,但今天我的Tomcat服务器无法启动.弹出一个对话框,它说:"开始在本地主机的 ...

  8. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解

    Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...

  9. 在JAVA语言程序中main_在Java程序main方法中,正确的参数是

    [单选题]下列叙述中,错误的是 [填空题]Access属于()数据库,Access中,不允许在主关键字字段中有重复值或(). [单选题]如下哪些字符串是Java中的标识符? [填空题]常用的基本电量传 ...

最新文章

  1. php 去除中英文空格,php去除字符串首尾中英文空格程序-PHP源码
  2. [How TO]-ubuntu下快速搭建http
  3. 如何使用Axure高效完成高保真原型
  4. C语言数组中找到第一个重复元素的算法(附完整源码)
  5. spring mvc学习(55):简单异常处理二
  6. sql sum 结果集不为零_sql语句分类练习题
  7. 卢伟冰曝Redmi K50系列最新进展:天玑9000调校比较顺利
  8. AirFlow常见问题汇总
  9. BGP 最佳路径选择之 -- Local Preference
  10. python培训价目表-Python培训一般要多少钱?
  11. 计算机硬件课题,计算机硬件技术基础免试课题.pptx
  12. 线性代数【八】二次型
  13. c语言标准库函数fputs,C 库函数
  14. 公达 TP-POS58G 打印机驱动
  15. Sky Walking 介绍 及 8.7.0 源码学习环境搭建
  16. A - Faulty Odometer
  17. 保险业未来生态的起点与三条演化路径 | 李有龙生态矩阵
  18. qu32调音台说明书_使用效果不错艾伦赫赛QU32调音台带中文说明书_北京金舒恺歌科技发展有限公司(亿商网手机版)...
  19. matlab 卷积算子,matlab  矩阵卷积imfilter  conv2  filter 区别探究
  20. layDate使用心得

热门文章

  1. 前端学习(2310):数据请求和json-server
  2. oracle之数据处理之约束2
  3. 前端学习(3):vs code编辑器
  4. 实例23:python
  5. 前端开发怎么用php,做web前端开发怎么样?
  6. 用matlab画大数据曲线_基于MATLAB的大数据分析
  7. oracle opatch那个回退,下面是我在打OPatch时使用的一般步骤,供大家参考
  8. 不同操作系统打开文件浏览器(资源管理器)的方式
  9. BDD框架之Cucumber研究
  10. htaccess文件,强大的功能