当前位置: 首页 > news >正文

Java 代码规范if嵌套

在Java编程中,过度的if嵌套会使代码难以阅读和维护。为了遵循良好的代码规范,我们应尽量减少嵌套的深度。这通常可以通过重新组织代码或使用其他结构(如switch语句,或者将逻辑封装到单独的方法中)来实现。

以下是一个减少if嵌套的示例。

示例:用户身份验证和权限检查

假设我们有一个系统,需要对用户进行身份验证,并根据用户的角色赋予不同的权限。

不规范的做法(深层嵌套):

public class AccessControl {  public static void checkAccess(User user) {  if (user != null) {  if (user.isAuthenticated()) {  if (user.getRole().equals("admin")) {  System.out.println("Admin access granted.");  } else if (user.getRole().equals("user")) {  System.out.println("User access granted.");  } else {  System.out.println("Access denied.");  }  } else {  System.out.println("User is not authenticated.");  }  } else {  System.out.println("User is null.");  }  }  
}

规范的做法(减少嵌套):

public class AccessControl {  public static void checkAccess(User user) {  if (user == null) {  System.out.println("User is null.");  return;  }  if (!user.isAuthenticated()) {  System.out.println("User is not authenticated.");  return;  }  grantAccessBasedOnRole(user);  }  private static void grantAccessBasedOnRole(User user) {  switch (user.getRole()) {  case "admin":  System.out.println("Admin access granted.");  break;  case "user":  System.out.println("User access granted.");  break;  default:  System.out.println("Access denied.");  break;  }  }  
}

在这个改进的版本中,我们通过提前返回(return)来减少嵌套的深度。我们还引入了一个新的方法grantAccessBasedOnRole来处理基于角色的访问控制,这进一步提高了代码的可读性和可维护性。

1. 示例中的User

为了完整起见,这里是一个简单的User类,用于上述示例:

public class User {  private String name;  private String role;  private boolean authenticated;  public User(String name, String role, boolean authenticated) {  this.name = name;  this.role = role;  this.authenticated = authenticated;  }  public String getName() {  return name;  }  public String getRole() {  return role;  }  public boolean isAuthenticated() {  return authenticated;  }  
}

2. 测试代码

我们可以使用以下代码来测试上述的AccessControl类:

public class Main {  public static void main(String[] args) {  User admin = new User("Alice", "admin", true);  User user = new User("Bob", "user", true);  User guest = new User("Charlie", "guest", true);  User unauthenticatedUser = new User("David", "user", false);  User nullUser = null;  AccessControl.checkAccess(admin); // 输出: Admin access granted.  AccessControl.checkAccess(user); // 输出: User access granted.  AccessControl.checkAccess(guest); // 输出: Access denied.  AccessControl.checkAccess(unauthenticatedUser); // 输出: User is not authenticated.  AccessControl.checkAccess(nullUser); // 输出: User is null.  }  
}

首先,我们可以为User类添加一些更多的属性和方法,使其更加真实和实用。

3. 扩展的User

public class User {  private String username;  private String password; // 新增密码属性  private String role;  private boolean isAuthenticated;  public User(String username, String password, String role) {  this.username = username;  this.password = password;  this.role = role;  this.isAuthenticated = false; // 初始未认证  }  // Getters and Setters  public String getUsername() {  return username;  }  public void setUsername(String username) {  this.username = username;  }  public String getPassword() {  return password;  }  public void setPassword(String password) {  this.password = password;  }  public String getRole() {  return role;  }  public void setRole(String role) {  this.role = role;  }  public boolean isAuthenticated() {  return isAuthenticated;  }  public void setAuthenticated(boolean authenticated) {  isAuthenticated = authenticated;  }  // 新增认证方法  public boolean authenticate(String password) {  if (this.password.equals(password)) {  this.isAuthenticated = true;  return true;  }  return false;  }  
}

4. 扩展的AccessControl

我们可以在AccessControl类中添加一个登录方法,用于处理用户的认证。

public class AccessControl {  // ... 之前的代码 ...  // 新增登录方法  public static boolean login(User user, String password) {  return user.authenticate(password);  }  
}

5. 扩展的测试类Main

public class Main {  public static void main(String[] args) {  // 创建用户并设置初始密码和角色  User admin = new User("adminUser", "adminPass", "admin");  User user = new User("regularUser", "userPass", "user");  // 尝试登录并验证权限  if (AccessControl.login(admin, "adminPass")) {  System.out.println("Admin logged in successfully.");  checkAccess(admin); // 假设这是一个单独的方法,用于打印访问权限信息  } else {  System.out.println("Admin login failed.");  }  if (AccessControl.login(user, "userPass")) {  System.out.println("User logged in successfully.");  checkAccess(user); // 假设这是一个单独的方法,用于打印访问权限信息  } else {  System.out.println("User login failed.");  }  }  // 新增一个方法来检查并打印用户访问权限信息  private static void checkAccess(User user) {  if (user.isAuthenticated()) {  switch (user.getRole()) {  case "admin":  System.out.println("Admin access granted. Full permissions.");  break;  case "user":  System.out.println("User access granted. Limited permissions.");  break;  default:  System.out.println("Unknown role. Access denied.");  break;  }  } else {  System.out.println("User is not authenticated. Access denied.");  }  }  
}

在这个扩展的示例中,我们为用户添加了一个密码属性,并允许用户通过authenticate方法进行认证。AccessControl类现在提供了一个login方法,用于处理登录逻辑。测试类Main中,我们创建了两个用户(管理员和普通用户),并尝试使用正确的密码登录。登录成功后,我们调用checkAccess方法来验证和打印出用户的访问权限信息。

这个示例现在更加完整,并且具有实际的应用价值,因为它模拟了一个简单的用户认证和权限检查系统。

相关文章:

Java 代码规范if嵌套

在Java编程中,过度的if嵌套会使代码难以阅读和维护。为了遵循良好的代码规范,我们应尽量减少嵌套的深度。这通常可以通过重新组织代码或使用其他结构(如switch语句,或者将逻辑封装到单独的方法中)来实现。 以下是一个…...

ASPICE如何确保汽车软件产品质量的稳固基石

ASPICE通过一系列的方法和原则来保障汽车软件产品的质量,以下是其保障产品质量的几个关键方面: 制定明确的质量方针和目标: ASPICE要求组织制定明确的质量方针和目标,这些方针和目标与客户需求和预期相一致。 开发团队需要定义软…...

【深度学习】yolov8-seg分割训练,拼接图的分割复原

文章目录 项目背景造数据训练 项目背景 在日常开发中,经常会遇到一些图片是由多个图片拼接来的,如下图就是三个图片横向拼接来的。是否可以利用yolov8-seg模型来识别出这张图片的三张子图区域呢,这是文本要做的事情。 造数据 假设拼接方式有…...

Python升级打怪—Django入门

目录 一、Django简介 二、安装Django 三、创建Dajngo项目 (一) 创建项目 (二) 项目结构介绍 (三) 运行项目 (四) 结果 一、Django简介 Django是一个高级Python web框架,鼓励快速开发和干净、实用的设计。由经验丰富的开发人员构建,它解决了web开…...

leetcode面试题17.最大子矩阵

sooooooo long没刷题了,汗颜 题目链接:leetcode面试题17 1.题目 给定一个正整数、负整数和 0 组成的 N M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和…...

计算机网络:构建联结的基础

目录 1. 网络拓扑结构 1.1 星型拓扑 1.2 环型拓扑 1.3 总线型拓扑 1.4 网状拓扑 2. 传输介质 2.1 双绞线 2.2 同轴电缆 2.3 光纤 2.4 无线电波 3. 协议栈模型 3.1 OSI模型 3.2 TCP/IP模型 4. 网络设备 4.1 交换机 4.2 路由器 4.3 网关 4.4 防火墙 5. IP地址…...

node和npm安装;electron、 electron-builder安装

1、node和npm安装 参考: https://blog.csdn.net/sw150811426/article/details/137147783 下载: https://nodejs.org/dist/v20.15.1/ 安装: 点击下载msi直接运行安装 安装完直接cmd打开可以,默认安装就已经添加了环境变量&…...

操作系统概念(黑皮书)阅读笔记

操作系统概念(黑皮书)阅读笔记 进程和内存管理部分章节 导论: 操作系统类似于政府,其本身不能实现任何有用功能,而是提供一个方便其他程序执行有用工作的环境 ​ 个人理解:os是government的作用&#xff0…...

matlab gui下的tcp client客户端编程框架

GUI界面 函数外定义全局变量 %全局变量 global TcpClient; %matlab作为tcpip客户端 建立连接 在“连接”按钮的回调函数下添加以下代码: global TcpClient;%全局变量 TcpClient tcpip(‘192.168.1.10’, 7, ‘NetworkRole’,‘client’); %连接到服务器地址和端…...

Matplotlib : Python 的绘图库

Matplotlib 是一个 Python 的绘图库,广泛用于生成各种静态、动态、交互式的图表。它基于 NumPy,一个用于科学计算的 Python 库。Matplotlib 可以用于生成出版质量级别的图表,并且提供了丰富的定制选项,以适应不同用户的需求。以下…...

数据编织 VS 数据仓库 VS 数据湖

目录 1. 什么是数据编织?2. 数据编织的工作原理3. 代码示例4. 数据编织的优势5. 应用场景6. 数据编织 vs 数据仓库6.1 数据存储方式6.2 数据更新和实时性6.3 灵活性和可扩展性6.4 查询性能6.5 数据治理和一致性6.6 适用场景6.7 代码示例比较 7. 数据编织 vs 数据湖7.1 数据存储…...

CSS(十一)——CSS分组和嵌套,尺寸(Dimension)

CSS 分组 和 嵌套 选择器 分组选择器 举个例子,多个标签有同一个样式,就可以不一个一个分开写,使用分组选择器 比如: h1 {color:green; } h2 {color:green; } p {color:green; } 就可以写为: h1,h2,p {color…...

必备神器!三款优秀远程控制电脑软件推荐

嘿,各位职场小伙伴们,今儿个咱们来聊聊个挺实用又带点“科技范儿”的话题——电脑远程控制那点事儿。作为刚踏入职场不久的新人,我深刻体会到,在这信息爆炸的时代,掌握几招远程操作的技能,简直就是给自个儿…...

关于正运动学解机器人手臂算法

机器人正运动学是机器人学的一个分支,研究机器人的运动和位置之间的关系。它通过解析机器人的结构和关节参数,以及给定的关节角度,来计算机器人的末端执行器的位置和姿态。 机器人正运动学算法通常使用DH(Denavit-Hartenberg&…...

MySQL 约束 (constraint)

文章目录 约束(constraint)列级约束和表级约束给约束起名字(constraint)非空约束(no null)检查约束(check)唯一性约束 (unique)主键约束 (primary key)主键分类单一主键复合主键主键自增 (auto_increment) 外键约束外什…...

用python程序发送文件(python实例二十六)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.文件上传 3.1 代码构思 3.2 服务端代码 3.3 客户端代码 3.4 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具…...

最新源支付系统源码 V7版全开源 免授权 附搭建教程

本文来自:最新源支付系统源码 V7版全开源 免授权 附搭建教程 - 源码1688 简介: 最新源支付系统源码_V7版全开源_免授权_附详细搭建教程_站长亲测 YPay是专为个人站长打造的聚合免签系统,拥有卓越的性能和丰富的功能。它采用全新轻量化的界面…...

HTML:lang属性作用

lang作用 用法常见语言代码优点示例结构效果说明分析HTML 基础结构导航栏内容部分总结 扩展 用法 HTML 文档级别: 在 <html> 标签上使用 lang 属性&#xff0c;指定整个文档的语言。 <!DOCTYPE html> <html lang"en"> <head><meta charse…...

Android SurfaceFlinger——纹理的绘制流程(二十八)

在系统开机动画的播放流程中,会从给定的资源文件中加载纹理数据并初始化一个 OpenGL 纹理对象,这里我们就来解析软件模拟纹理的绘制流程。 一、纹理概述 在 Android 的 SurfaceFlinger 系统组件中,纹理(Texture)是一个核心概念,特别是在涉及到图形渲染和显示的过程中。 …...

深入解析Memcached:C#中的应用与实战案例

目录 Memcached简介Memcached的特点Memcached的工作原理Memcached的应用场景Memcached的安装和配置Memcached与C#的集成 引入依赖配置Memcached客户端C#代码示例 存储数据读取数据删除数据深入解析Memcached 数据存储和过期策略分布式架构性能优化实战案例 缓存数据库查询结果实…...

4步构建高效视频处理流水线:VideoFusion全功能指南

4步构建高效视频处理流水线&#xff1a;VideoFusion全功能指南 【免费下载链接】VideoFusion 一站式短视频拼接软件 无依赖,点击即用,自动去黑边,自动帧同步,自动调整分辨率,批量变更视频为横屏/竖屏 项目地址: https://gitcode.com/gh_mirrors/vi/VideoFusion 功能特性…...

收藏!2026非科班/转行小白必看:3步切入AI大模型,月薪30w+实战路径

2026年的职场赛道&#xff0c;AI大模型依旧是绝对的“黄金风口”。 最新行业报告显示&#xff0c;AI相关岗位需求逆势增长37%&#xff0c;薪资领跑全行业&#xff0c;大厂校招起薪普遍突破25k。但一个残酷的现实是&#xff1a; 太多非科班、半路转行的程序员&#xff0c;还在门…...

模拟地和数字地到底怎么接?从ADC设计误区讲起,用磁珠还是直接铺铜?

数模混合电路设计中的地平面处理&#xff1a;从ADC噪声抑制到系统级EMC优化 1. 数模混合电路的接地困局&#xff1a;当磁珠成为噪声放大器 在24位ADC采样电路中&#xff0c;工程师老张遇到了一个诡异现象&#xff1a;当输入信号低于1mV时&#xff0c;采集数据会出现周期性毛刺。…...

零中断迁移:企业级文档系统全流程实战指南

零中断迁移&#xff1a;企业级文档系统全流程实战指南 【免费下载链接】outline Outline 是一个基于 React 和 Node.js 打造的快速、协作式团队知识库。它可以让团队方便地存储和管理知识信息。你可以直接使用其托管版本&#xff0c;也可以自己运行或参与开发。源项目地址&…...

Qwen3.5-4B-Claude-Opus快速上手:Web页面直接调用推理蒸馏模型

Qwen3.5-4B-Claude-Opus快速上手&#xff1a;Web页面直接调用推理蒸馏模型 1. 模型概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。该版本以 G…...

AR.js实战指南:如何在Web浏览器中构建高效增强现实应用

AR.js实战指南&#xff1a;如何在Web浏览器中构建高效增强现实应用 【免费下载链接】AR.js Image tracking, Location Based AR, Marker tracking. All on the Web. 项目地址: https://gitcode.com/gh_mirrors/arj/AR.js 在移动设备普及的今天&#xff0c;增强现实&…...

Qwen2.5-VL-7B-Instruct应用场景:跨境电商商品图自动打标+多语种描述生成

Qwen2.5-VL-7B-Instruct应用场景&#xff1a;跨境电商商品图自动打标多语种描述生成 1. 跨境电商的痛点与解决方案 跨境电商卖家每天面临两个核心挑战&#xff1a;商品图片标注和多语言描述撰写。传统方式需要人工逐张图片添加标签&#xff0c;再用翻译工具转换语言&#xff…...

如何突破内容访问限制?5类开源工具的技术解析与场景适配

如何突破内容访问限制&#xff1f;5类开源工具的技术解析与场景适配 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代&#xff0c;优质内容往往被各种访问限制所阻…...

MAA明日方舟自动化助手:5分钟快速上手指南

MAA明日方舟自动化助手&#xff1a;5分钟快速上手指南 【免费下载链接】MaaAssistantArknights 一款明日方舟游戏小助手 项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights MAA&#xff08;MaaAssistantArknights&#xff09;是一款专为《明日方…...

实战指南:如何用Hydra在Kali Linux上快速破解Telnet弱密码(附字典优化技巧)

Kali Linux渗透测试实战&#xff1a;Hydra高效破解Telnet服务的进阶技巧 在渗透测试和网络安全评估中&#xff0c;弱密码检测是基础但至关重要的环节。Telnet作为传统的远程管理协议&#xff0c;由于采用明文传输&#xff0c;成为安全测试的重点对象。本文将深入探讨如何利用Ka…...