是否可以使用通用返回类型定义接口方法并定义返回类型的具体实现?

2024-01-29

我想创建一个界面:

public interface OperandValue
{
    <T> T getValue();
}

然后我想要一个像这样的具体实现:

public class NumberOperandValue implements OperandValue
{
    @Override
    public <Integer> Integer getValue()
    {
        // some integer value that is set elsewhere
        return 1;
    }
}

Eclipse 强调了<Integer>给我一个警告说:

类型参数 Integer 隐藏了 Integer 类型

我很感激任何关于这是否能以某种方式起作用的建议。我意识到我可以在接口级别而不是方法级别定义泛型类型,但如果可能的话,我想尝试让它工作。


您可能想将界面更改为:

public interface OperandValue<T>
{
    T getValue();
}

并实施:

public class NumberOperandValue implements OperandValue<Integer>
{
    @Override
    public Integer getValue()
    {
        // some integer value that is set elsewhere
        return 1;
    }
}

现在您要告诉接口您希望该方法返回什么类型。换句话说,您正在使接口类型变得通用,而不是方法声明。但这似乎就是你想要的。

作为旁注:

public <Integer> Integer getValue()

实际上意味着“定义一个名为“Integer”的泛型类型参数”,其中getValue返回“Integer”类型you刚刚定义。

回应史蒂夫下面的评论:

当我删除<Integer>从我的方法实现中,我然后 收到一条警告:Type safety: The return type Integer for getValue() from the type NumberOperandValue needs unchecked conversion to conform to T from the type OperandValue

该警告消息表明您在使用 Java 泛型时违反了规则。要了解原因,让我们在删除方法签名之前考虑一下方法签名的含义<Integer>类型参数。

public <Integer> Integer getValue()

这个签名意味着该方法getValue返回类型的值Integer where Integer被定义为您在尖括号之间定义的泛型类型参数。字符串的含义Integer是完全任意的,并且具有与以下完全相同的含义:

public <T> T getValue()

为了清楚起见,为了解决您的问题,我们继续使用此版本的方法签名。当我们删除类型参数时会发生什么?

public T getValue()

现在如果你尝试编译,你会得到一个错误T未定义。但是,因为您的原始类型签名使用名称声明了类型参数Integer,当你删除它时,你剩下:

public Integer getValue()

Because Integer is already预定义类型,方法签名在技术上仍然是合法的。然而,类型参数的名称恰好与已存在的类型相同只是偶然。

此外,因为您的接口已经声明了方法签名with泛型,当您从实现中删除它时,Java 编译器会生成警告。具体来说,编译器担心在基类中,方法的返回类型是(类型擦除为Object) 通用参数命名Integer,它与名为的系统类不是同一类型(也不知道与其类型兼容)Integer (or java.lang.Integer准确地说)。

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

是否可以使用通用返回类型定义接口方法并定义返回类型的具体实现? 的相关文章

  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会

随机推荐

  • django 密码保护页面

    我想为法官做一个注册页面 但我想确保在进入注册页面之前你必须输入密码 每个法官都会有一个我将提供给他们的相同的密码 他需要一个简单的页面上有一个窗口用于输入我之前提供的密码 如果有人能够说出我如何创建这样的模型及其形式 或者是否有任何其他更
  • 在命令行上指定 emacs 中的窗口布局

    我希望能够在从命令行启动 Emacs 时指定它的窗口布局 更具体地说 我调用 emacs file1 file2 file3 file4 例如 请参阅 file1 buff list instead of the default that
  • HTML 行跨度 1,5(一倍半)

    假设我有下表 table border 2 tr td abcsss td td sdf td td def td td def td td defsssss td tr tr td abcsss td td sdf td td def t
  • ANSI-C 语法 - 数组声明,如 [*] 等

    ANSI C 语法来自 link http www quut com c ANSI C grammar y html给我以下数组声明规则 1 direct declarator type qualifier list assignment
  • 将列索引转换为对应的列字母

    我需要将 Google 电子表格列索引转换为其相应的字母值 例如 给定一个电子表格 我需要这样做 这个函数显然不存在 它只是一个例子 getColumnLetterByIndex 4 this should return D getColu
  • 资源注释:未定义 [javax.sql.DataSource] 类型的合格 bean:预期有单个匹配 bean,但发现了 2 个

    我正在使用基于 Spring Java 的配置来使用 Spring Data 配置多个数据库 在配置文件中 我创建了两个data source for MySQL and MSSQL Server 当尝试使用以下命令将依赖项注入实体管理器时
  • 如何获取向nodejs服务器发送数据(.emit())的用户的详细信息?

    我正在试验一个正在运行的应用程序nodejs express and socket io 服务器端 var app require express var http require http Server app var io requir
  • 将 SQLite 与 DMD 静态链接 (Windows x86)

    我尝试与 sqlite3 静态链接但没有成功 我正在使用 etc c sqlite3 标头和 sqlite3 合并 为了创建 lib 文件 我尝试了 VC 和 MinGW gcc 它们都成功编译了源文件 但它们都生成 COFF 对象格式 D
  • 挂钩可用于在 django 和 mysql 设置死锁后自动重试

    我在 Django 中使用 innoDB 表和 mysql 数据库 在调查错误期间 操作错误 1213 尝试获取锁定时发现死锁 尝试重新启动事务 我碰到这个答案 https stackoverflow com a 2423921 10268
  • 如何分析二进制文件?

    我有一个二进制文件 我不知道它是如何格式化的 我只知道它来自delphi代码 有没有办法分析二进制文件 是否存在任何 模式 来分析和反序列化未知格式文件的二进制内容 试试这些 反序列化数据 分析它是如何编译你的exe的 尝试文件分析器 ht
  • ASP.NET MVC 3.0 FormCollection 中的 JQuery Post 表单

    我尝试将 Jquery 中的表单提交到控制器中的 Action 方法 为此 我序列化我的表单并使用 get 方法 在控制器中 我收到像 param1 1 param2 2 这样的字符串形式的表单 有没有办法在我的操作方法中直接检索 Form
  • nginx 1.2.0 - socket.io - HTTP/1.1 - 代理 websocket 连接

    我想用 nginx proxy pass 模块替换我的 node http proxy 模块 正如我所读到的 新发布的 nginx 版本是否可以开箱即用地支持 HTTP 1 1 我看到一些线程正在努力解决这个问题 即 nginx 不支持 w
  • 使用 Shiny R 将反应性弹出图/图添加到 Leaflet 地图

    我已经构建了一个闪亮的仪表板 用户可以从下拉菜单中选择一个城市 然后下载该城市的一系列数据并使用 Leaflet 进行可视化 主要的用户需求是单击地图上的某个区域会生成一个弹出图表 其中包含该区域的所有分数 见下图 这是我的一般方法 将用户
  • .NET 中是否存在排序队列?

    我需要一个相当专业的 NET 集合 我不认为 BCL 可以帮助我 但我想我会把它扔掉 因为如果有人知道类似的东西 基本上 我的要求是 我有一个值对列表 例如 3 10 5 10 3 7 5 5 顺序很重要 即 3 10 10 3 单个值的重
  • 选择除一列之外的所有重复行

    我想在数据集中查找行 其中除一列之外的所有列中的值都匹配 经过一番尝试 尝试让重复 返回重复行的所有实例 而不仅仅是第一个实例 失败后 我找到了一种方法 如下 例如 我想识别 Iris 数据集中除 Petal Width 之外的所有相等的行
  • 在显示之前在 jQuery UI 日期选择器中设置另一个月份作为默认值

    在我的情况下 我必须将上个月设置为默认值 日期选择器的默认月份是当前月份 但我希望它是上个月或其他月份作为默认显示 我怎样才能做到呢 如 2010 09 为默认 非常感谢 您可以使用defaultDate http jqueryui com
  • 当用户已经被占用时,php用户名检查数据库

    您好 我有一个注册系统 它运行良好并保存到数据库 我在检查数据库中的用户名 如果已存在 时遇到问题 我检查数据库的脚本是错误的 有人可以帮我解决这个问题吗 下面是我的代码
  • .NET 3.5 - 配置系统初始化失败异常

    在我的 winform 应用程序中 我尝试添加 userSetting 尽管 appSettings 也出现错误 添加设置后 我收到一个异常 其中显示 配置系统无法初始化 并带有内部异常 无法识别的配置部分 userSetting 异常详细
  • Hosting.json 可用选项

    我在哪里可以找到一些有关哪些选项可用的文档hosting json文件 现在我正在使用server ulrs但我想知道是否可以在其上添加 https 证书路径 密码 My hosting json server urls http 0 0
  • 是否可以使用通用返回类型定义接口方法并定义返回类型的具体实现?

    我想创建一个界面 public interface OperandValue