0

0

教程:如何在子类中覆盖 @DefaultValue 注解

花韻仙語

花韻仙語

发布时间:2025-07-30 22:04:01

|

599人浏览过

|

来源于php中文网

原创

教程:如何在子类中覆盖 @defaultvalue 注解

本文旨在解决在没有 Spring 框架支持的情况下,如何在 Java 子类中灵活地覆盖父类中 @DefaultValue 注解的问题。通常,在 Web 服务开发中,我们使用 @DefaultValue 注解为查询参数设置默认值。当多个类需要共享一些公共的查询参数,但又需要为这些参数设置不同的默认值时,直接继承父类并修改 @DefaultValue 注解会变得困难。本文将介绍几种实现此目标的方案,包括在子类中重新声明变量以及使用变量隐藏等方法。

方法一:在子类中重新声明变量

最直接的方法是在子类中重新声明父类的变量,并使用 @DefaultValue 注解赋予新的默认值。这种方法简单易懂,无需复杂的继承结构。

import javax.ws.rs.DefaultValue;
import javax.ws.rs.QueryParam;
import lombok.Data;

@Data
class BaseDto {

    @DefaultValue("1")
    @QueryParam("sortBy")
    private String sortBy;

    @DefaultValue("ASC")
    @QueryParam("sortDir")
    private String sortDir;
}

@Data
class KeywordsDto extends BaseDto {

    @DefaultValue("5")
    @QueryParam("sortBy")
    private String sortBy; // 重新声明 sortBy 并赋予新的默认值
}

public class Main {
    public static void main(String[] args) {
        KeywordsDto keywordsDto = new KeywordsDto();
        System.out.println(keywordsDto.getSortBy()); // 输出: 5
    }
}

在这个例子中,KeywordsDto 类继承了 BaseDto 类。虽然 BaseDto 类中已经定义了 sortBy 字段,但在 KeywordsDto 类中又重新声明了 sortBy 字段,并使用 @DefaultValue("5") 注解赋予了新的默认值。当访问 KeywordsDto 对象的 sortBy 属性时,将使用子类中定义的默认值,而不是父类的默认值。

注意事项:

GitHub Copilot
GitHub Copilot

GitHub AI编程工具,实时编程建议

下载
  • 这种方法实际上是在子类中创建了一个新的变量,与父类的变量同名,但它们是不同的变量。
  • 这种方法被称为“变量隐藏”(Variable Hiding),子类中的变量隐藏了父类中的同名变量。

方法二:使用 Getter/Setter 方法覆盖默认值(不推荐)

虽然不推荐,但可以通过覆盖 getter 和 setter 方法来实现类似的效果。这种方法比较繁琐,可读性较差,且不符合面向对象的设计原则。

import javax.ws.rs.DefaultValue;
import javax.ws.rs.QueryParam;
import lombok.Data;

@Data
class BaseDto {

    @DefaultValue("1")
    @QueryParam("sortBy")
    private String sortBy;

    @DefaultValue("ASC")
    @QueryParam("sortDir")
    private String sortDir;

    public String getSortBy() {
        return sortBy;
    }

    public void setSortBy(String sortBy) {
        this.sortBy = sortBy;
    }
}

@Data
class KeywordsDto extends BaseDto {

    @Override
    public String getSortBy() {
        // 在这里可以根据条件返回不同的默认值
        if (super.getSortBy() == null) {
            return "5";
        }
        return super.getSortBy();
    }
}

注意事项:

  • 这种方法增加了代码的复杂性,不推荐使用。
  • 在实际应用中,应尽量避免使用这种方式来覆盖默认值。

总结

在没有 Spring 框架的情况下,在子类中覆盖 @DefaultValue 注解的最佳方法是在子类中重新声明变量。这种方法简单、直接,易于理解和维护。虽然可以通过覆盖 getter/setter 方法来实现类似的效果,但这种方法增加了代码的复杂性,不推荐使用。选择合适的方法取决于具体的应用场景和代码的可维护性要求。在设计类结构时,应充分考虑代码的复用性和灵活性,选择最适合的方案。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

112

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

26

2026.01.26

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

52

2025.11.27

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

52

2025.11.27

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

52

2025.11.27

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号