Skip to content

普通class文件热重载

属性变动

java
public class User {
    
    private String userId; 
    
    private String name; 
    private String userName; 
    
    private Integer userAge; 
}
  • 可以使用新增的 userId 属性。
  • 删除 name 属性,可以使用新增的 userName 属性。
  • 可以使用新增的 userAge 属性。

方法变动

java
public class UserUtils {

    public static String getUserName(UserVO userVO) {
        return userVO.getName();
    }
    
    public static User getDefaultUser() { 
    public static User genDefaultUser () { 
        User user = new User();
        user.setUserId(0); 
        user.setUserId(Id.next()); 
        user.setName("default"); 
        user.setUserName("default"); 
        user.setUserAge(0);
        return user;
    }
}
  • 可以使用新增的 getUserName 方法。
  • 删除掉 getUserDefaultUser 方法,可以使用新增的 genDefaultUser 方法。

静态信息变动

支持 static 变量、static final 变量、static 静态代码块。

java
public class StaticClass {
    
    private static String var1 = "debug"; 
    private static String var1 = "tools"; 
    
    private static final String var2 = "debug"; 
    private static final String var2 = "tools"; 
    
    private static String var3;
    
    static {
        var3 = "debug"; 
        var3 = "tools"; 
    }
    
}

变量 var1 、var2 、var3 更改为重载之后的值。

枚举类信息变动

java
public enum StatusEnum {
    
    A1, 
    A22, 
    A2, 
    A3, 
}

更改之后只有 A2 、A3 两个枚举值。

java
public enum StatusEnum {

    A1(1, "a"), 
    A1(1, "A"), 
    A22(22, "BB"), 
    A2(2, "B"), 
    A3(3, "C"), 
    ;
    private final Integer code;

    private final String name;

    public StatusEnum(Integer code, String name) {
        this.code = code;
        this.name = name;
    }

    public Integer getCode() {
        return code;
    }

    public String getName() {
        return name;
    }
    
    public StatusEnum of(Integer code) { 
        for (StatusEnum statusEnum : StatusEnum.values()) { 
            if (statusEnum.getCode().equals(code)) { 
                return statusEnum; 
            } 
        } 
        return code; 
    }
}

更改之后的内容生效。

内部类变动

java
public class UserVO {
    
    private String userName;
    
    private List<RoleVO> userRoles;
    
    public static class RoleVO {
        
        private Long roleId;  
        
        private String name;  
        private String roleName;  

        private Integer status; 
        
        public String getName() { 
            return name; 
        public String getRoleName() { 
            return roleName; 
        }
        
        public String getStatusName() { 
            return status == 1 ? "正常" : "禁用"; 
        } 
        
    }
    
    private List<AuthVO> userAuths; 
    
    public class AuthVO { 
        
        private String authName; 
        
    } 
}
  • 增加了 userAuths 属性。
  • 正常使用修改了 RoleVO 内部类信息。
  • 正常使用新增了 AuthVO 内部类信息。

抽象类

开启热重载,抽象类修改,所有的子类都会生效。

java
public abstract class User {
    
    public String getUserName() { 
        return "default"; 
    } 
}

public class Debug extends User {
    
}

public class Tools extends User {

}

热重载 User 之后,DebugTools 都可以使用 getUserName() 方法。

接口

接口默认方法修改,所有的实现类都会生效。

java
public interface User {
    
    default String getUserName() { 
        return "default"; 
    } 
}

public class Debug implements User {
    
}

public class Tools implements User {

}

热重载 User 之后,DebugTools 都可以使用 getUserName() 方法。