使用实现多个接口预泛型的参数

2024-01-07

假设我有这些接口:

public interface I1 {
  void foo();
}

public interface I2 {
  void bar();
}

和课程:

public class A extends AParent implements I1, I2 {
   // code for foo and bar methods here
}

public class B extends BParent implements I1, I2 {
  // code for foo and bar methods here
}

public class C extends CParent implements I1 {
  // code for foo method here
}

现在,通过泛型,我可以拥有如下方法:

public <T extends I1 & I2> void method(T param) {
  param.foo();
  param.bar();
}

我可以使用 A 和 B 作为参数来调用它,但不能使用 C (它没有实现 I2)。

有没有办法实现这种类型的类型安全预泛型(java

考虑到 A、B 和 C 具有不同的继承树,并且像 AParent 和 BParent 本身拥有共同父级这样的操作并不是真正的选择。

我知道你可以这样做:

public void method(I1 param) {
  param.foo();
  ((I2)param).bar();
}

但你也可以打电话method(new C())它没有实现 I2,所以你会遇到麻烦。

那么还有其他方法可以做到这一点吗?

附: : 我其实没有必要这样做,我主要是出于好奇才问的。


创建第三个接口 I3 扩展 I1 和 I2。那么A类和B类都实现了I3,并且泛型方法接受I3。

这也许是唯一的方法。

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

使用实现多个接口预泛型的参数 的相关文章

随机推荐

  • 搜索实现特定接口并执行方法的类

    我想调用实现某些特定接口的类中的方法 我已经尝试和搜索了很多 但不知道该怎么做 这是我的想法 但它不起作用 希望可以有人帮帮我 getting the list List
  • Java String 的默认初始值是多少?

    考虑一个名为的 Java 字符串字段x 的初始值是多少x当为类 x 创建对象时 我知道对于int变量 默认值指定为0 在创建实例时 但会变成什么String 如果您不执行任何操作 它会初始化为 null 所有引用类型也是如此
  • android在对话框中加载webview [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 webview 中打开 twitter auth 而不是在浏览器中打开 有什么好的教程如何在
  • 用 Beautiful Soup 解析 XML

    编辑 已解决 我想我应该在底部添加我的答案 注意 所需的输出是一堆像 US D0591026 我的 XML 数据如下所示
  • 比较两个 C 风格字符串的正确函数是什么?

    所以我陷入了两难的境地 我需要比较两个 C 风格的字符串 并搜索了最合适的函数 memcmp Compare two blocks of memory function strcmp Compare two strings function
  • 使用免费的第三方 dll 将 word 转换为 pdf

    我想将word文档转换为pdf 我找到了很多使用 Office dll 的解决方案 但我想要一个使用免费第三方dll的解决方案 因为在office dll中必须安装office 所以我的服务器上没有安装office 有没有免费的第三方dll
  • 将组合变音符号转换为简单 utf

    由于某些编码问题 我在将字符串插入数据库时 遇到问题 字符串源是外部 rss 提要 在网络浏览器中看起来没问题 即使在调试器中 文本也看起来没问题 如果我将strong复制到记事本中 结果也可以 但在记事本 中可以看到字符串正在使用组合字符
  • 如何从 Android 调用 PHP 函数?

    我想调用服务器上的特定 php 函数并发送一些参数 到目前为止 我实现了可以使用 HttpClient 打开 php 文件并执行数据传输到 Json 并在我的应用程序中显示 那么 现在我希望能够调用特定函数并向其发送参数 我该怎么做 抱歉
  • Oracle 和分页

    在 MySql 中 分页的概念可以通过使用单个 SQL 语句轻松实现LIMIT子句类似于以下内容 SELECT country id country name FROM country c ORDER BY country id DESC
  • 无法使用 MongoEngine Pymongo 和 Django 返回 JSON 对象?

    所以我试图返回一个项目的 JSON 对象 我花了几个小时试图让 Django 返回 JSON 这是我们一直在研究的观点 def json request first name user User objects all user User
  • ASP.NET MVC AJAX 与 HTML.ValidationMessageFor

    我习惯使用 ASP NET Webforms 通过 UpdatePanels 执行 AJAX 的简单方法 我知道这个过程对于 MVC 来说更加手工 在特定情况下 我使用数据注释来验证某些表单输入 我使用 HTML ValidationMes
  • 如何全局更改Swing JTextFields的ActionMap?

    我想通过用我的自定义实现替换一些操作来更改整个应用程序中 Swing JTextFields 的 ActionMap 关于原因的解释可以参考以下帖子 如何使 JTextComponent 的插入符跳过选定的文本 https stackove
  • 如何在悬停时反转转换?

    我可以通过 CSS 反转悬停时的过渡动画吗 当我将鼠标悬停在 菜单 文本上时 我需要滑动到右侧蓝线 并在 400 毫秒延迟后从左侧灰线滑动 是否可以 menu display inline block position relative f
  • 是否有像 phpMyAdmin 这样的工具可以配置为仅访问单个数据库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有像 phpMyAdmin 这样的工具可以配置为仅访问服务器中的单个 MySQL 数据库 我无法使
  • Bootstrap Dropdown 在 React 中不起作用

    我从引导下拉列表中添加了一个用于 React 的下拉按钮 但它不起作用并显示为普通按钮 你能给我一个解决方案吗 div div
  • Ajax.BeginForm 指定“GET”类型发帖

    我的看法如下 Scripts jquery unobtrusive ajax js type text javascript gt Scripts jquery validate js type text javascript gt Scr
  • 我应该使用 DTO 作为 MVVM 中的数据模型吗?

    我目前正在研究我第一次真正尝试使用 MVVM 并且一直在阅读各种关于如何最好地实现它的文章 我当前的想法是有效地使用我的数据模型作为数据传输对象 使它们可序列化并让它们同时存在于客户端和服务器端 这似乎是一个合乎逻辑的步骤 因为这两种对象类
  • Rails 3.1:无法在添加它的同一迁移中写入列

    我有一个可以正常运行的 add column 迁移 然而 在运行它并启动控制台后 我会发现first name和last name列完全为空 我尝试使用save 相反 它具有相同的效果 没有报告错误 这是原文 class UserAddFi
  • 如何在 Sublime Text 3 中运行 python 代码?

    所以我尝试从 Sublime Text 3 运行 python 代码 但我不知道如何运行 即使只是来自控制台 那也没关系 有人知道怎么办吗 工具 gt 构建系统 gt Python 或 Ctrl B
  • 使用实现多个接口预泛型的参数

    假设我有这些接口 public interface I1 void foo public interface I2 void bar 和课程 public class A extends AParent implements I1 I2 c