反射——通过工厂类来完成获取接口示例

2023-10-31

反射可实现程序中无new关键字,实现真正的解耦合

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Member;

/**
 * 只要是获取接口示例,都应该通过工厂类来完成
 */

interface IMessager {
    public void send(String msg);
}

class NewsPaper implements IMessager {
    @Override
    public void send(String msg) {
        System.out.println("【报纸报道】" + msg);
    }
}

class NetMessage implements IMessager {
    @Override
    public void send(String msg) {
        System.out.println("【网络消息】" + msg);
    }
}

class Factory {
    private Factory() {
    }

    public static IMessager getInstance(String className) {
        IMessager iMessager = null;
        try {
            iMessager = (IMessager) Class.forName(className).getDeclaredConstructor().newInstance();
        } catch (Exception e) {
        }
        return iMessager;
    }
}

public class TestDemo {
    public static void main(String[] args) {
        IMessager messager = Factory.getInstance("NewsPaper");   //获取指定的接口示例 可以传包+类名
        if (messager != null) {
            messager.send("www.baidu.com");
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反射——通过工厂类来完成获取接口示例 的相关文章

  • 在 Java 中捕获(捕获)窗口中的鼠标光标

    我正在寻找一种方法 在鼠标进入窗口后捕获或捕获该窗口中的鼠标 就像鼠标被捕获在虚拟机窗口中一样 直到用户按 CTRL ALT DEL 或以其他方式释放鼠标 我如何在 Java 中实现这一点 全屏显示不是一个选择 EDIT 这里有一些 SSC
  • 是否可以使用 Java 读写 Parquet,而不依赖 Hadoop 和 HDFS?

    我一直在寻找这个问题的解决方案 在我看来 如果不引入对 HDFS 和 Hadoop 的依赖 就无法在 Java 程序中嵌入读写 Parquet 格式 它是否正确 我想在 Hadoop 集群之外的客户端计算机上进行读写 我开始对 Apache
  • 如何从 Java 访问 Windows 设备管理器中的信息?

    我有一个串行 USB 设备 并且其中多个设备可以连接到计算机 我需要查询和检索设备连接到的 COM 端口列表 在 Windows 设备管理器中 您可以获得当前连接的设备的 COM 端口 友好名称 该列表是动态的 从注册表中读取不工作 htt
  • 如何将本机数据库运算符 (postgres ~) 与 JPA 标准生成器一起使用?

    我使用 JPA 2 0 标准构建以下查询 简化 select n from notif n where n message b la 我正在使用 postgresql 数据库 我真的需要 运算符 而不是像 我可以使用与 CriteriaBu
  • 获取Android库中的上下文

    我正在编写一个 Android 应用程序 它的一些功能封装在内部库中 但是 要使此功能发挥作用 库需要一个应用程序上下文的实例 为图书馆提供这种上下文的最佳方式是什么 我看到了一些选择 但没有一个有吸引力 Have my library c
  • Maven WebApp META-INF context.xml

    我正在使用 Maven 3 并且尝试在 webapp 文件夹下添加 META INF 文件夹 所以我正在尝试执行以下操作 src main webapp META INF context xml WEB INF 下面是我的 POM 文件
  • java项目中无法加载类“org.slf4j.impl.StaticLoggerBinder”错误? [复制]

    这个问题在这里已经有答案了 我越来越Failed to load class org slf4j impl StaticLoggerBinder 错误 我想将记录器写入文件 所以我使用了 log4j jar 并使用 apache tomca
  • Spring HATEOAS 和 HAL:更改 _embedded 中的数组名称

    我正在尝试使用 Spring HATEOAS 构建符合 HAL 的 REST API 经过一番摆弄后我终于开始工作了mostly正如预期的那样 示例 输出现在看起来像这样 links self href http localhost 808
  • for循环中更新JLabel的问题

    我的程序的想法是从之前在其他 JFrame 中保存的列表中选择一个名称 我想在标签中一个接一个地打印所有名称 它们之间有很小的延迟 然后停在其中一个名称上 问题是lbl setText String 如果有多个则不起作用setText co
  • 从 CLI 部署 Maven 项目?

    在 IDE 中构建并运行良好 cd home thufir NetBeansProjects HelloMaven JAVA HOME usr lib jvm java 8 openjdk amd64 home thufir local s
  • 是否可以手动检查 LocateRegistry 是否存在?

    I 已经发现 https stackoverflow com a 8338852 897090一种安全的方式获得LocateRegistry 即使注册表尚不存在 Registry registry null try registry Loc
  • 在Java中如何将字节数组转换为十六进制?

    我有一个字节数组 我希望该数组的每个字节字符串转换为其相应的十六进制值 Java中有没有将字节数组转换为十六进制的函数 byte bytes 1 0 1 2 3 StringBuilder sb new StringBuilder for
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • 了解Kafka流groupBy和window

    我无法理解 kafka 流中的 groupBy groupById 和窗口的概念 我的目标是聚合一段时间内 例如 5 秒 的流数据 我的流数据看起来像 value 0 time 1533875665509 value 10 time 153
  • 获取 Future 对象的进度的能力

    参考 java util concurrent 包和 Future 接口 我注意到 除非我弄错了 只有 SwingWorker 实现类才能启动冗长的任务并能够查询进度 这就引出了以下问题 有没有办法在非 GUI 非 Swing 应用程序 映
  • 无法连接到docker中的elasticsearch容器

    我正在尝试使用 docker 的官方 elasticsearch 镜像 我遵循了本指南 https www elastic co guide en elasticsearch reference current docker html但是当
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • 为什么不能在 if 语句中声明变量?

    以下 Java 代码无法编译 int a 0 if a 1 int b 0 if a 1 b 1 为什么 不能有任何代码路径导致程序将 1 分配给b无需先声明 我突然想到b的变量范围可能仅限于第一个if声明 但后来我不明白为什么 如果我实在
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • Android ClassNotFoundException:在路径上找不到类

    10 22 15 29 40 897 E AndroidRuntime 2561 FATAL EXCEPTION main 10 22 15 29 40 897 E AndroidRuntime 2561 java lang Runtime

随机推荐

  • Python之列表

    标题 列表 什么是列表 列表的创建 列表的删除 列表的访问 列表的常用方法 append insert extend pop remove clear count index list filter reduce lambda 列表支持的运
  • Tomcat:eclipse首选项中没有tomcat?

    为eclipse添加tomcat插件 近期因为兴趣 找了一个javaweb的纯SSM的项目 但是发现我的eclipse4 7版本的 首选项中竟然没有tomcat 所以在网上找了很多方法 终于找到一个很有用的博客 有俩种方法 方法一 一 下载
  • 【OpenCV学习笔记】【函数学习】四(origin+imageData+cvcopy()函数+CvMemStorage 类型+CvPoint类型)

    1 origin 在使用opencv显示图像时会出现图像倒立的情况 这与IplImage的origin属性有关系 origin为0表示顶左结构 即图像的原点是左上角 如果为1为左下角 一般从硬盘读入的图片或者通过cvCreateImage方
  • 289. 生命游戏(Java)

    题目描述 根据 百度百科 生命游戏 简称为生命 是英国数学家约翰 何顿 康威在 1970 年发明的细胞自动机 给定一个包含 m n 个格子的面板 每一个格子都可以看成是一个细胞 每个细胞都具有一个初始状态 1 即为活细胞 live 或 0
  • Python期末实训,爬虫实验报告

    Python爬取豆瓣电影 版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net qq 45774645 article details 11
  • 华为手机微信聊天记录删除怎么恢复?基于华为电脑助手备份的恢复方法

    华为手机最新的微信记录恢复方法 简单有效 HiSuite是华为手机官方的手机电脑助手管理软件 可以把手机设备上的数据备份至电脑 支持联系人 短信 应用程序等的备份 同样HiSuite也可以把微信库文件完整地备份到电脑上 这样就可以扫描微信库
  • 如何编写REST API

    编写REST API REST API规范 编写REST API 实际上就是编写处理HTTP请求的async函数 不过 REST请求和普通的HTTP请求有几个特殊的地方 REST请求仍然是标准的HTTP请求 但是 除了GET请求外 POST
  • Oracle 动态sql 实现方式

    1 2 Sample Program 10 Dynamic SQL Method 4 3 4 This program connects you to ORACLE using your username and 5 password th
  • 后端接口判断字段必填_ERP系统会计凭证中的那些必填项

    作者 Jelly 声明 本文章仅代表原作者观点 仅用于SAP软件的应用与学习 不代表SAP公司 01 凭证日期 凭证日期是必填的 凭证日期填写原始单据的日期 02 过账日期 过账日期是必填的 凭证正式过账到系统的日期 系统默认凭证记账当日
  • 微信小程序webview(H5页面)调用微信小程序支付

    1 业务描述 微信小程序商城入口进入的页面是商城H5页面 在H5页面进行微信支付如何实现 2 微信小程序 webview访问H5页面 必须使用微信小程序支付 如何实现以及实现方式以及支付后页面返回功能 商品详情 h5页面 gt 商品确认页
  • 人工智能不断发展扫码升级刷脸是必然趋势

    人工智能技术的不断发展 刷码升级成刷脸也是必然趋势 刷脸技术落地以后 迎合5G浪潮 将会提供更精准 更完善 更丰富化的服务 它的全面应用将会为企业带去智能化体验 也会引发新一轮的行业变革 起到真正的赋能作用 支付宝 微信支付 银联的三大巨头
  • Go Code Review Comments 译文

    持续更新中 原文最新链接https github com golang go wiki CodeReviewComments 5a40ba36d388ff1b8b2dd4c1c3fe820b8313152f Github译文链接https
  • Keil5添加.c文件与.h文件的方法-导入支持库-新大陆物联网竞赛-Lora模块&NBIOT模块例程-添加导入文件

    一 概述 在某些情况下 我们使用现用的物联网开发例程 例如新大陆物联网的Lora与NBIOT的例程 我们对其例程内目前所有的库不满意 不足以实现开发需要的功能 我们需要在原有工程上添加我们自己的库 以满足开发需要 二 操作步骤 首先 打开文
  • 【NodeJs-5天学习】第一天篇④ ——了解NodeJs回调函数和事件驱动机制

    NodeJs 5天学习 第一天篇 NodeJs回调函数和事件处理机制 1 Node js 中的回调 Callback 函数 2 Nodejs事件循环模型 2 1 浅析事件驱动 2 2 深入NodeJs事件驱动 3 总结 面向读者群体 电子物
  • logback 配置详解(二)——appender

    1 appender
  • solidworks 2020小金球_solidworks2020如何开启小金球RealView

    solidworks2020如何开启小金球RealView 如何查看sw否开启小金球RealView 只有在建模环境下依次点击 视图 显示 RealView图形 就可以看见小金球RealView是否开启 像图片中的呈现灰色 则表示小金球Re
  • 今天使用模板特化所遇到的问题

    template lt class T gt void test const T t cout lt lt void test const T t lt lt endl template lt gt void test lt int gt
  • Ubuntu中deb包详解及打包教程

    一 deb包详解 1 gt deb 包的文件结构 deb 软件包里面的结构 它具有DEBIAN和软件具体安装目录 如etc usr opt tmp等 deb包本身有三部分组成 组成 详细 数据包 包含实际安装的程序数据 文件名为 data
  • C# 中的Dispose()用法

    Dispose 在向大家详细介绍C 调用Dispose 方法之前 首先让大家了解下Dispose 方法 然后全面介绍C 调用Dispose 方法 我们已经知道了处置那些占用非受控 unmanaged 资源的对象的重要性 现在应该编写资源管理
  • 反射——通过工厂类来完成获取接口示例

    反射可实现程序中无new关键字 实现真正的解耦合 import java lang reflect InvocationTargetException import java lang reflect Member 只要是获取接口示例 都应