在java中使用接口的实现类型

2024-03-28

我想创建一个接口,强制实现它的每个类对于实现的类的类型具有特定的功能。

假设我有类 MyClassA、MyClassB、MyClassC 等,它们都需要自己类型的函数:

在我的A班:

public class MyClassA implements MyClass {
    MyClassA function(MyClassA x) {
        doSomethingImplementedInMyClassA(x);
    }
}

在我的B类中:

public class MyClassB implements MyClass {
    MyClassB function(MyClassB x) {
        doSomethingImplementedInMyClassB(x);
    }
}

问题是接口怎么写MyClass需要这样的功能吗?

public interface MyClass {
    MyClass function(MyClass x);
}

显然不起作用,因为返回类型是 MyClass 而不是它的实现。如何在 Java 中正确地做到这一点?


您可以使用泛型:

public interface MyClass<V extends MyClass<V>> {
    V function(V x);
}

public class MyClassA implements MyClass<MyClassA> 

这被称为CRTP http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern.


这并不完美;它仍然允许类似的事情

public class MyClassB implements MyClass<MyClassA> 

To do this correctly, you need higher-kinded types [citation needed], which Java does not support.

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

在java中使用接口的实现类型 的相关文章

  • Netbeans:如何从“设计”GUI 构建器向 JTable 添加 valueChanged 侦听器?

    我右键单击 JTable 并将一些代码插入到 后侦听器代码 中 结果很糟糕 我没有看到添加选项 table getSelectionModel addListSelectionListener new ListSelectionListen
  • Eclipse 构建 Android 应用程序:如何在编译时创建两个版本?

    我正在编写一个 Android 应用程序 并希望基于相同的代码创建两个版本 免费版本和高级版本 我有两个版本的一个代码库 具有各种运行时检查来启用或禁用某些功能 例如 public class MyAppContext extends Ap
  • 关于线程的停止

    我开发了一个代码 它将在执行时启动两个线程 public class MyThread1 extends Thread extend thread class public synchronized void run synchronize
  • 何时在 Springs @Configuration 中将 proxyBeanMethods 设置为 false?

    当查看 spring 自动配置时源代码 https github com spring projects spring boot tree master spring boot project spring boot autoconfigu
  • mapFragment.getMapAsync 处的 NullPointerException

    在解决了与我的标题相关的问题后 我找不到问题的解决方案 我有一个NullPointerException at mapFragment getMapAsync 下面是我的MapActivity code package com exampl
  • 如何在 Apache POI 中获取 Excel 空白单元格值?

    我有一个巨大的 Excel 文件 其中包含大量列 如下所示 Column1 Column2 Column3 Column4 Column5 abc def ghi mno pqr 这是我编写的用于打印这些值的代码 try FileInput
  • Android Studio 1.0.1 APK META-INF/DEPENDENCIES 中复制的重复文件

    我安装了 Android Studio 版本 1 0 1 并尝试将我的项目从 eclipse 导入到它 它给了我以下错误 Error Execution failed for task app packageDebug Duplicate
  • “找不到符号”或“无法解析符号”错误是什么意思?

    请解释以下有关 找不到符号 无法解析符号 或 找不到符号 错误 Java 中 的信息 他们的意思是什么 哪些因素会导致它们 程序员如何修复它们 这个问题旨在对 Java 中的这些常见编译错误进行全面的问答 0 这些错误之间有什么区别吗 并不
  • 在 Java 中从 Json 字符串中提取字段

    我正在尝试从以下 Json 字符串中提取每个 company id 的 id String test company id 4100 data drm user id 572901936637129135 direct status id
  • java SWT透明复合背景

    我有复合对象 Composite composite new Composite shell SWT NONE composite setBounds new Rectangle 10 10 100 100 我如何使这个组合具有透明背景 我
  • java中的new关键字是多余的吗?

    我来自 C 所以 java 的一个特性我不太理解 我读过所有对象都必须使用关键字创建new 但基元除外 现在 如果编译器可以识别原始类型 并且不允许您在不调用其构造函数的情况下创建对象new 有这个关键字的原因是什么new根本吗 有人可以提
  • 通常可重用的注释或公共注释?

    有没有常用的注释 类似于 commons lang 如果没有 您是否见过在任何开源应用程序开发中有效使用注释 不是内置注释 的情况 我记得 Mifos 用它来进行交易 Mohan i think 休眠验证器 http www hiberna
  • 动态添加组件到 JDialog

    当用户单击 JDialog 上的按钮时 我在将组件添加到 JDialog 时遇到问题 基本上我希望它看起来像这样 然后 当用户单击 添加新字段 时 我希望它看起来像这样 我似乎无法打开添加新 JLabel 或 JTextField 的对话框
  • Spring 如何在登录网址上设置动态前缀

    我有一个始终以动态前缀开头的 Spring 应用程序 这是因为我需要该前缀来进行一些内部配置 问题是 当我尝试设置登录页面时 无法传递该前缀并使其工作 如何为我的登录页面设置动态前缀 这是我的 AppController 的一部分 我在其中
  • 光线追踪三角形

    我正在用java编写一个光线追踪器 并且我能够追踪球体 但我相信我追踪三角形的方式有问题 据我了解 这是基本算法 首先确定射线是否与plane三角形已打开 剪裁所有点 使它们与三角形位于同一平面上 因此xy以平面为例 根据沿着新平面向任意方
  • 使用 getPathMatcher 的全局模式

    从 OCP 考试的 Kathy Sierra Bert Bates 书中我找到了以下代码 public class FileTest public static void matches Path path String glob Path
  • Java - 全局、可重用的加载对话框

    我正在尝试实现一个全局加载对话框 我想调用一些静态函数来显示对话框和一些静态函数来关闭它 与此同时 我正在主线程或子线程中做一些工作 我尝试以下操作 但对话框没有更新 最后一次 在再次隐藏之前 它会更新 private static Run
  • Java 压缩字符串

    我需要创建一个接收字符串并返回字符串的方法 防爆输入 AAABBBCCC 防爆输出 3A4B2C 好吧 这很尴尬 我在今天的面试中无法做到这一点 我正在申请初级职位 现在 我在家尝试制作一些静态工作的东西 我的意思是 不使用循环有点无用 但
  • 你在实际项目中使用过Quickcheck吗[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 快速检查 http www cs chalmers se rjmh QuickCheck 及其变体 即使有一个Java https bitbuc
  • Java邮件,设置回复地址不起作用

    我用java写了一个小的电子邮件发送程序 它有from to and reply to地址 当客户端尝试回复邮件时 应该能够回复reply to地址 目前它不起作用 我的代码如下 File Name SendEmail java impor

随机推荐

  • 如何调试CompletableStage死锁?

    我最近遇到的最困难的调试问题是异步操作之间的死锁 例如 给定两个CompletionStage链 其中第一个链调用依赖于第二个链的完成的方法 第二个链调用依赖于第一个链的完成的方法 这在现实生活中并不那么明显 因为依赖关系往往是隐藏的 有时
  • OTRS:使用 wsdl 生成 Java SEI 时出错

    Windows 7 Java 7 OTRS appliannce 我正在尝试使用 wsimport 来生成带有 wsdl 文件的 Java SEIhttps raw githubusercontent com OTRS otrs maste
  • C 中 (*p)[8] 和 *p[8] 有什么区别?

    两个声明如下 int p 8 int p 8 第一个是single指向 8 个整数的数组的指针 而第二个是array8 个指针 每个指针指向一个整数 如果你只是踢起来cdecl 对于这类事情来说非常棒 pax cdecl Type help
  • 如何使用 laravel-mix 将 mdbootstrap vue 加载到 Laravel 5 中?

    我正在尝试将 mdbootstrap vue 安装到 Laravel 5 6 项目中 但我真的不明白我该怎么做 如果有人能给我一些教程 那就太好了 试试这个 已更新 假设你已经安装了laravel 转到您的项目目录并执行以下操作 npm i
  • 删除 Ember 数据中 POST/PUT 操作的 JSON 根元素

    我正在使用一个 Web 服务 该服务在 POST PUT 动词中需要如下所示的 JSON id CACTU companyName Cactus Comidas para llevar contactName Patricio Simpso
  • 字典中的差异

    我试图找出字典中的差异 是否添加或删除了某些内容以及从什么内容中添加或删除了某些内容 这是一个添加值的情况 original 0 None 1 False 2 16 new 0 None 1 False 2 2 16 difference
  • 从构建中获取 BuildAgent 信息

    我有一个 IBuildDetail 变量 其中包含我需要的构建信息 好的 但是当我检查属性 BuildAgent 时 它显示 build BuildAgent 抛出了类型为 System NotImplementedException 的异
  • Windows CMD 中的创建日期

    使用 Windows 批处理 此函数返回文件的创建日期 creationDate set CompareFile 1 echo CompareFile for f skip 5 tokens 1 2 4 5 delims a in dir
  • 如何获取内存中对象的数据集?

    有谁知道与泛型和 RTTI 一起使用的 TDataset 后代 以便我可以编写这样的代码 并在 GUI 中使用数据感知组件 ds TDataset
  • 如何使用 Clap Args 的内部库 Enum

    我目前正在研究一个铁锈端口 https github com JuxhinDB twistrs某证券的tool https github com elceef dnstwist 与 Rust 的指南一致 我想将核心库隔离到自己的包中 以便我
  • 如何以编程方式删除 Groovy 中的默认导入?

    默认情况下 一些包是在 Groovy 类中导入的 我知道您可以使用 ImportCustomizer 添加新的 但有没有一种方法可以以编程方式删除它们 预先感谢您的回答 不 如果你查看代码 你会发现标准进口 http groovy code
  • 使用java库访问谷歌云存储遇到“403禁止”

    我正在尝试在 scala 中使用谷歌云存储 java 库来列出存储桶中的项目 val credential new GoogleCredential Builder setTransport GoogleNetHttpTransport n
  • Set-AzStorageBlobContent 引发异常:路径中存在非法字符

    我正在将 Azure 部署脚本从 AzureRM 迁移到 Az 新模块似乎无法打开文件 有任何想法吗 我尝试用正斜杠替换反斜杠 我什至从脚本所在的文件夹中调用它 所以我不需要向它传递完整的文件名 它会正确地将其解析为全名 但它仍然无法打开它
  • julia变量的范围:在开放表达式的循环内重新分配

    我正在努力在 Julia 的循环中重新分配变量 我有一个以下的例子 infile test txt feature for ln in 1 3 println feature feature end open infile do f if
  • Java解析相对路径

    您将如何解决相对路径 我正在寻找的是一个类似于php的realpath的功能 该函数只需要删除所有 以便输入字符串可以安全地与其他字符串一起使用 一般的方式是使用File类获取规范路径 https docs oracle com javas
  • 如何将字符串转换为小数点后三位的小数?

    string num 23 6 我想知道如何将其转换为小数点后三位 喜欢 decimal nn 23 600 有什么方法吗 我尽力了 首先你的string num 23 6 won t even编译 您需要在字符串中使用双引号 例如stri
  • 混合模式内容 - 如何从 h1 中选择文本但不包含其子元素的文本?

    我在打印简单文本时遇到问题 h1 元素 require nokogiri doc Nokogiri HTML h1 em Name em A Johnson h1 puts doc at xpath h1 content 它输出 NameA
  • 什么是 dict_keys、dict_items 和 dict_values?

    我在使用的时候遇到过这三种类型collections Counter的 viewkeys viewitems 和 viewvalues 方法 这三个方法返回的值都是类型dict keys dict items and dict values
  • 如何将TextView旋转90度并显示[重复]

    这个问题在这里已经有答案了 我在图表页面遇到一种情况LinearLayout应该显示TextView旋转 90 度 尝试这个
  • 在java中使用接口的实现类型

    我想创建一个接口 强制实现它的每个类对于实现的类的类型具有特定的功能 假设我有类 MyClassA MyClassB MyClassC 等 它们都需要自己类型的函数 在我的A班 public class MyClassA implement