Java - 使用具体类型覆盖对象类型参数

2024-04-07

EDIT:我将把这个作为一个例子。请阅读评论以获取更多信息,但一般来说:不要使用此设计!这不好!

我搜索答案有一段时间了,但找不到任何真正具体的说法,不,你不能,因为……或者是的,你可以,那就是你这样做的方式..

所以问题是,我可以创建一个定义对象类型参数的抽象方法,然后使用具体的参数类型来实现它,如下所示:

public abstract class ToBeOverriden {
    public Object method1 (Object parameter);
    public String method2 (Object parameter);
    public void method3 (Object parameter);
}

然后用这个覆盖它:

public class Implementation {
    @Override
    public DateTime method1 (Person parameter){
        return new DateTime();
    }

    @Override
    public String method2 (MotorCycle parameter){
        return new DateTime();
    }

    @Override
    public void method3 (String parameter){
        return new DateTime();
    }
}

其中 Person 是我创建的对象。返回类型可以是任何类型。目前我无法做到这一点。它不允许我。我的猜测是,这是因为我的类没有扩展对象。虽然一切都扩展了 Object...所以...

或者我需要刷新我的 Java 知识吗? :)

编辑:添加了更复杂的类结构。

Thanks!


你需要使用Java 泛型 http://docs.oracle.com/javase/tutorial/java/generics/index.html:

public abstract class ToBeOverriden<E,V> {
    public E method (V parameter);
}

public class Implementation extends ToBeOverriden<DateTime,Person> {
    @Override
    public DateTime method (Person parameter){
        return new DateTime();
    }
}

Added:

E可以省略参数,代码仍然可以编译。但是,如果不同的实现ToBeOverriden会使用不同的返回类型,我认为最好保留E。但这是个人品味的问题 - 我不喜欢看到Object代码中的任何位置。

Added 2:

至于问题中的更新,您需要为每个方法都有一个单独的通用类型。例如:

public abstract class ToBeOverriden<A,B,C> {
    public Object method1 (A parameter);
    public String method2 (B parameter);
    public void method3 (C parameter);
}

然而,通常,当您需要如此可怕的结构时 - 那么您的代码设计方式是错误的。在 95% 的情况下,1 个泛型类型参数就足够了。在 4.99% 的情况下,2 个泛型类型参数就足够了。

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

Java - 使用具体类型覆盖对象类型参数 的相关文章

  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 如何将jscrollpane添加到jframe?

    我有以下源代码 有人可以给我建议如何将 jscrollpane 添加到 jframe 上吗 我尝试了几次将其添加到 jframe 但没有任何进展 它甚至没有显示 public class Form3 JFrame jframe new JF
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • 虽然我的类已加载,但 Class.forName 抛出 ClassNotFoundException

    代码如下 它的作用是加载我放在主目录中的 jar 文件中的所有类 import java io File import java util jar JarFile import java util jar JarEntry import j
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • 如何使用通配符模拟泛型方法的行为

    我正在使用 EasyMock 3 2 我想基于 Spring Security 为我的部分安全系统编写一个测试 我想嘲笑Authentication http docs spring io autorepo docs spring secu

随机推荐

  • 如何在 Xamarin for Android 中压缩文件?

    我有一个函数可以创建一个 zip 文件和传递的文件字符串数组 该函数确实成功创建了 zip 文件及其内部的 zip 条目文件 但这些 zip 条目文件是空的 我尝试了几种不同的方法 下面的函数代码是我最接近的工作代码 public stat
  • miniconda 和 miniforge 之间有什么区别?

    The 小型锻造厂 https github com conda forge miniforgeinstaller 是一个相对较新的 社区主导的 最小的 conda 安装程序 正如其自述文件中所述 可以直接与 Miniconda 进行比较
  • 如何在 Q/KDB 中生成格式化的日期字符串?

    如何从 Q 日期类型生成 ISO 日期字符串 yyyy MM dd 我考虑过连接各个部分 但我什至无法获取日期 月份 例如d 2015 12 01 d month prints 2015 12 即不仅仅是月份 如果您计划大规模执行此操作 即
  • pip、代理身份验证和“不支持代理方案”

    尝试在新的 python 安装上安装 pip 我遇到了代理错误 看起来像一个错误get pip or urllib3 问题是我是否必须经历设置的痛苦CNTLM 如此处所述 https stackoverflow com questions
  • 如何从控制台输入填充整数数组

    假设我知道用户将输入多少个数字 我有一个 int 数组 我想用用户输入的按特定字符 例如空格 分隔的整数来填充它 我设法用这种方法解决了它 int numbers new int 5 string input Console ReadLin
  • SciPy:半圆上的冯米塞斯分布?

    我试图找出定义包裹在半圆上的冯米塞斯分布的最佳方法 我用它来绘制不同浓度的无方向线 我目前正在使用 SciPy 的 vonmises rvs 本质上 我希望能够输入 pi 2 的平均方向 并将分布截断到两侧不超过 pi 2 我可以使用截断的
  • BeautifulSoup:抓取 HTML 仅在单击同一 URL 中的“接受”后才能访问

    我正在尝试从某个 URL 中抓取一些信息 我们称其为 www foo bar baz 当您使用网络浏览器访问该 URL 时 通常会出现 我已年满 18 岁 按钮 URL 不会改变 只有当您手动单击该按钮时才会加载实际内容 我想 模拟 单击
  • 如何在Python中对西班牙语进行编码和解码

    我用 python 2 7 编写了以下代码 coding utf 8 import sys string a os luz detr s print string encode utf 8 这会引发以下错误 print string enc
  • Xcode 6.1:加载插件失败

    我从 AppStore 更新了 Xcode 但由于以下错误消息而无法打开它 加载插件失败该插件或其必备插件之一可能丢失或损坏 可能需要重新安装 我尝试通过从应用程序文件夹中删除 Xcode 来卸载它并重新安装它 但问题仍然相同 谁能弄清楚出
  • 如何用不连续性数据绘制折线图?

    我在 R 中使用 ggplot2 库绘制图表时遇到问题 我有一个 日期 变量 其中包含 3 个 品牌 品牌中每个品牌的披露值 评级 的日期 问题是 一场活动结束后 市场就只剩下两个品牌了 因此 我想在同一图中分别绘制此事件之前和之后的线条
  • 从三个单独的列表创建嵌套字典

    我编写了一些代码来生成三个围绕项目的单独列表 第一个列表是 ID 列表 第二个列表是开始日期列表 第三个列表是结束日期列表 我想将这些列表合并到一个嵌套字典中 item 0 from start date and item 0 从 end
  • JavaScript 函数拒绝在生产服务器上工作,但在本地服务器上工作

    我正在使用从 Macromedia Dreamweaver 借用的 MM goToURL 函数将 HTTP 请求发送到服务器上的特定 URL 下面是该函数的代码 它在外部 JavaScript 文件中声明 function MM goToU
  • HTML 或 JavaScript 是否有建议的最大行长度? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 大多数编程语言的大多数样式指南都建议最大行长度 通常为 80 个字符 对于 HTML 和 JavaScript 当它嵌入到 HTML 中时 来说
  • 请求在此上下文中不可用 -> 在 Global.asax 中 -> 替换什么

    为什么下面的行在 global asax 中有错误 string RelativeFilePath AbsoluteFilePath Replace Request ServerVariables APPL PHYSICAL PATH St
  • 对象不支持属性或方法“有效”

    我的代码抛出以下错误 对象不支持属性或方法 有效 这是因为当前表单没有验证 那没问题 我只想提前检查一下我是否可以应用该方法valid到当前表单以避免烦人的 JavaScript 错误 这就是我想要的 例如 if form isValida
  • Pandas read_csv 转换器 – 如何处理异常(literal_eval SyntaxError)

    在 Pandas DataFrame 中 我正在读取一个 csv 文件 如下所示 A B 0 t1 t2 1 t3 t4 其中两个单元格中有文字元组 其中两个单元格为空 df pd read csv my file csv dtype st
  • 这是 Linux 内核代码中的任何类型的宏吗?

    我在linux内核代码中找到了这个http gitorious org pandroid kernel omap blobs 5ed7607d45b300a37dd13ad1c79adea56f6687ce arch arm mach om
  • 在 R 中有效地插值网格中的值

    我有一个按位置排列的海洋深度数据网格 并且正在尝试为选定的 GPS 点插入深度值 我们一直在使用 RSAGA pick from points 它对于小数据集效果很好 require RSAGA depthdata lt cbind dat
  • 如何从 COCO 数据集创建掩模图像?

    所以我一直在使用这段代码 我正在尝试从 COCO 数据集中生成图像的原始蒙版 dataDir G dataType train2014 annFile annotations instances json format dataDir da
  • Java - 使用具体类型覆盖对象类型参数

    EDIT 我将把这个作为一个例子 请阅读评论以获取更多信息 但一般来说 不要使用此设计 这不好 我搜索答案有一段时间了 但找不到任何真正具体的说法 不 你不能 因为 或者是的 你可以 那就是你这样做的方式 所以问题是 我可以创建一个定义对象