首页 > 编程语言 >Java 代码规范if嵌套

Java 代码规范if嵌套

时间:2024-07-25 23:50:28浏览次数:13  
标签:Java String 代码 嵌套 User println out public user

在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,String,代码,嵌套,User,println,out,public,user
From: https://www.cnblogs.com/TS86/p/18324375

相关文章

  • Java代码实现七夕魔方照片墙
    创建一个七夕魔方照片墙是一个相对复杂的任务,涉及到前端展示和后端数据处理。在这里,我会提供一个简化的Java后端示例,用于生成一个模拟的“照片墙”数据模型,并给出一个基本的前端HTML页面来展示这些数据。请注意,由于这是一个简化的示例,它不会包含完整的用户交互和动态数据加载,而是......
  • 力扣131题:分割回文串的 Java 实现
    引言力扣(LeetCode)是一个在线编程平台,提供了大量的编程题目供开发者练习。第131题“分割回文串”是一个有趣的字符串处理问题,要求将一个字符串分割成尽可能多的回文子串。本文将介绍如何使用Java解决这个问题。题目描述给定一个字符串s,请将s分割成尽可能多的回文子......
  • 学习java第一百四十一天
    列举SpringFramework的优点。答:由于SpringFrameworks的分层架构,用户可以自由选择自己需要的组件。SpringFramework支持POJO(PlainOldJavaObject)编程,从而具备持续集成和可测试性。由于依赖注入和控制反转,JDBC得以简化。它是开源免费的。springbean容器的生命周期是......
  • java基础-面向对象
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言Java一门面向对象编程语言。面向对象的特点:抽象、封装、继承、多态。一、抽象编程的目的就是将现实的事物抽象为计算机可以理解的代码。二、封装目的是将事物的信息放到一个类中表达,可以......
  • 利用Java Swing实现在线游戏盒子:连连看游戏
    盒子实现游戏......
  • 日撸Java三百行(day03:基本if语句)
    文章目录:一、if、then、else1.if语句的第一种格式2.if语句的第二种格式3.if语句的第三种格式二、方法(函数)的调用1.方法定义1.1最简单的方法定义1.2带参数的方法定义1.2.1单个参数的方法定义格式1.2.2多个参数的方法定义格式1.3带返回值的方法定义2.方法的调用2.1......
  • JavaWeb笔记_JSTL标签库&JavaEE三层架构案例
    一.JSTL标签库1.1JSTL概述 JSTL(jspstandardtaglibrary):JSP标准标签库,它是针对EL表达式一个扩展,通过JSTL标签库与EL表达式结合可以完成更强大的功能  JSTL它是一种标签语言,JSTL不是JSP内置标签  JSTL标签库主要包含:   ****核心标签     ......
  • 自学java第二天
    String类型的基本使用String是引用数据类型,变量定义的格式为:String变量名="";""中的内容可以是任意的,叫做字符串,与char不同,char类型叫做字符,里面只能有一个内容。String的运算规则,在和基本数据类型进行运算时,会进行拼接的操作。例如:publicclassindex{publicst......
  • Java中的object类与objects类
    Java中的Object类和Objects类在Java类库中扮演着不同的角色,它们之间存在明显的区别。Object类基础与根源:Object类是Java类层次结构的根类。这意味着Java中的每一个类(除了Object类本身)都直接或间接地继承自Object类。Object类位于java.lang包中,这个包是Java的核心包之一,自......
  • stable diffusion文生图代码解读
    使用diffusers运行stablediffusion,文生图过程代码解读。只按照下面这种最简单的运行代码,省略了一些参数的处理步骤。fromdiffusersimportDiffusionPipelinepipeline=DiffusionPipeline.from_pretrained(MODEL_PATH,torch_dtype=torch.float16)pipeline.to("cuda......