0

0

在Java中对象之间如何进行协作_Java对象交互方式说明

P粉602998670

P粉602998670

发布时间:2026-02-10 10:41:03

|

758人浏览过

|

来源于php中文网

原创

Java对象协作有三种方式:一是直接方法调用,依赖引用传递与访问权限;二是通过接口解耦,实现依赖抽象而非具体类;三是利用函数式接口回调,支持异步通知与轻量协作;需警惕static工具类导致的隐式协作问题。

在java中对象之间如何进行协作_java对象交互方式说明

对象通过方法调用直接协作

Java 中最常见、最直接的对象协作方式,就是在一个对象的方法里调用另一个对象的 public 方法。这依赖于引用传递:只要持有对方的引用(比如作为字段、参数或局部变量),就能发起调用。

注意点:

  • 被调用方法必须是 public 或具有足够访问权限(如包内可见、protected
  • 调用方不能假设被调用对象处于某种特定状态——除非契约明确(比如文档或接口约定)
  • 避免在构造器中调用可被重写(non-final)的实例方法,否则可能触发子类未初始化完成时的逻辑
public class UserService {
    private final EmailService emailService;

    public UserService(EmailService emailService) {
        this.emailService = emailService; // 依赖注入
    }

    public void register(User user) {
        user.setStatus("ACTIVE");
        emailService.sendWelcomeEmail(user.getEmail()); // 直接协作
    }
}

使用接口解耦协作关系

硬编码依赖具体类会让协作僵化。用接口定义行为契约,让调用方只依赖抽象,被调用方只需实现接口——这是降低耦合的核心手段。

典型场景:

立即学习Java免费学习笔记(深入)”;

  • 多个实现类需替换(如 FileLoggerDatabaseLogger
  • 单元测试时需 Mock 协作对象(用 Mockito.mock(Logger.class)
  • Spring 等框架自动装配时,按类型匹配接口实现

错误示例:new DatabaseLogger() 写死在业务类中;正确做法是声明 private final Logger logger,由外部注入实现。

标贝科技
标贝科技

标贝科技-专业AI语音服务的人工智能开放平台

下载

通过回调函数(Functional Interface)反向通知

当协作不是单向“调用-返回”,而是需要被调用方在某个时机主动通知调用方时,Java 8+ 推荐用函数式接口(如 ConsumerBiFunction)传入回调逻辑。

优势明显:

  • 比传统 Listener 接口更轻量,无需定义新类型
  • 支持 lambda 表达式,协作逻辑内联,意图清晰
  • 避免因匿名内部类导致的内存泄漏(尤其 Android 场景)
public class DataFetcher {
    public void fetchData(String url, Consumer onSuccess, Runnable onError) {
        // 模拟异步请求
        if (url.contains("success")) {
            onSuccess.accept("{\"data\": 42}");
        } else {
            onError.run();
        }
    }
}

// 使用
fetchData("https://api.example/success",
    data -> System.out.println("Got: " + data),
    () -> System.err.println("Failed")
);

警惕隐式协作:static 工具类与全局状态

看似无害的 static 工具方法(如 StringUtils.isEmpty())其实是一种“无主协作”——调用方不持有协作对象引用,也不控制其生命周期。这类协作容易掩盖真实依赖,给测试和演进带来麻烦。

更危险的是静态可变状态,比如:

  • 静态集合缓存(private static Map cache)引发并发问题
  • 静态配置对象被多处修改,导致行为不可预测
  • 日志器(private static final Logger log = ...)虽安全,但若混入业务逻辑(如静态计数器),就破坏了单一职责

真正需要协作的对象,应该显式创建、显式传递、显式管理生命周期——哪怕只是用 @Autowired 或构造器注入,也比藏在 static 里强。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

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

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

118

2025.08.06

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

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

75

2026.01.26

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

211

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

191

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

58

2026.01.05

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1345

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

298

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2202

2025.12.29

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

0

2026.02.10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.4万人学习

C# 教程
C# 教程

共94课时 | 9万人学习

Java 教程
Java 教程

共578课时 | 61.6万人学习

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

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