编写指向其实现者的通用接口的便捷方法

2024-03-10

java中是否有一种编写通用接口的方法,以更方便的方式向此类接口的实现者指出?

例如我写的接口:

public interface Updatable<T> {
    void updateData(T t);
}

我想指出的是,只有实现者的实例可以在 updateData(T t) 方法中传递。

所以,我必须写这样的东西:

public class Office implements Updatable<Office> {

@Override
    public void updateData(Office office) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
...
...
...
}

不过好像有点丑。你有更好的变体吗?


人们一直在寻求“This”类型,主要是为了流畅的 API。可能永远也成不了了但我认为建立一个约定就可以了 - 命名类型变量This来表示类型this。所以读者看到This并确切地知道它应该是什么;滥用的可能性不大

public interface Updatable<This> {
    void updateData(This t);
}

// any Foo implementing Updatable must supply This=Foo

public class Office implements Updatable<Office> 

Since This必须是子类型Updatable<This>,人们经常表达这种约束

public interface Updatable<This extends Updatable<This>> 

我认为没有必要,也不应该这样做。的命名约定为This就足够好了。

该限制也不够严格,不足以防止滥用。例如

public interface Foo<T extends Foo<T>>

public class Foo1 implements Foo<Foo1>  // good, intended use

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

编写指向其实现者的通用接口的便捷方法 的相关文章

随机推荐

  • 实体框架设计器中的空白字符串默认值

    是否可以在实体框架的 EDMX 设计器中分配一个空白字符串 即 作为默认值 我发现的唯一技术是使用文本编辑器手动编辑 edmx 文件 我意识到这是一个非常古老的问题 但为了后代的缘故 在 EF4 设计器中 您可以在属性窗口字段中键入一个空格
  • 在 Swift 中创建 JSON 数组

    我的后端需要以下 JSON 正文 number 561310 number 132333 number 561310 当我像这样输入时 它在 Postman 中运行得非常好 如何使用 Swift 创建类似的 JSON 现在我有一个字符串类型
  • 304 If-None-Match有效时未修改

    我正在优化 Express JSON API 以供 iOS 和 Android 应用程序使用 当应用程序在 If None Match 标头中指定 etag 时 似乎无法让 Express 使用正确的 304 标头进行响应 我不需要设置 E
  • 在android中解析简单的json字符串

    我想使用 json 创建一个登录和注册系统 我想首先获取 url 的内容 然后解析 json 字符串 Json 字符串示例 employee mesg username is exsist id 0 name 0 username 0 em
  • 用于换行的 CSS 选择器

    假设我有一些相邻的元素 div class container div 1 div div 2 div div 3 div div 4 div div 5 div div 6 div div 样式如下 container gt div di
  • 我可以在 Cordova 2.5 上多次监听 deviceready 吗?

    我可以为每个 html 页面注册 deviceready 事件吗 我使用 Cordova 2 5 的初始化代码并且工作正常 当我将这些代码复制到新的html文件时 它总是调用index html的initialize 函数 var app
  • 使用 Youtube API v3 从特定频道搜索视频

    在我的项目中 我尝试使用特定频道中的关键字进行搜索查询 在 Youtube API v3 的文档中 他们说要在特定频道中搜索 您需要将channelId放入查询中 但它似乎不起作用 现在 我正在使用 YouTube Direct Lite
  • 将 Java PriorityQueue 更改为最大 PQ [重复]

    这个问题在这里已经有答案了 Java 标准库中的优先级队列实现似乎是一个最小优先级队列 我发现这有点令人困惑 为了将其变成最大的 我创建了一个自定义比较器对象 Comparator
  • Gradle 同步错误:未找到名称为“default”的配置

    我想添加外部库GuillotineMenu Android https github com Yalantis GuillotineMenu Android在我的应用程序中 我按照现有问题的得票最高的答案中给出的步骤进行操作如何将库项目添加
  • 在 WordPress 页面和帖子中插入 PHP 代码

    我想知道visitor使用 PHP 的国家并将其显示在 WordPress 页面上 但是当我将 PHP 代码添加到 WordPress 页面或发布时 它会出现错误 我们如何在 WordPress 页面和帖子上添加 PHP 代码
  • 类型错误:尝试分配给只读属性。在 iOS8 Safari 上的 Angularjs 应用程序中

    我们的移动应用程序收到 TypeError 尝试分配给只读属性 仅在 IOS 8 上 堆栈跟踪没有帮助 并且似乎在 Angular 代码中 发生这种情况可能是因为 Angularjs 代码顶层的 use strict 我的问题是 1 为什么
  • rownum / 获取前 n 行

    select from Schem Customer where cust 20 and cust id gt 890127 and rownum between 1 and 2 order by cust cust id 执行时间约2分1
  • 如何放大 Mapbox Leaflet 中的标记单击事件?

    我想在单击标记时放大该标记 我正在使用 Mapbox 和传单 I tried marker on click function e map setView e lat e lng 12 但这给了我某种错误 类型错误 t 为空 我什至尝试过
  • JOptionPane 显示选项对话框

    我想使用 JOptionPane 创建一个 showOptionDialog 它有两个按钮 公制和英制 如果单击 Metric 则会加载 Metric GUI 相反 如果单击 Imperial 则会加载 Imperial GUI 我该怎么做
  • 从头开始创建 LinkedList 类

    我们的任务是从头开始创建一个 LinkedList 但绝对没有任何读物来指导我们完成这项令人偏头痛的任务 而且网上的所有内容似乎都只是使用 Java 内置的 LinkedList 方法和东西 无论如何 当使用 Java 的默认内容时 链表非
  • 使用 pandas 将 JSON 输出为 CSV

    我正在尝试转换以下内容 json文件至 csv使用熊猫 输入 json 文件名 my json file json profile set doc type PROFILE key 123 mem list mem num 10001 cu
  • 正确生成带有特殊字符的站点地图 XML

    我有一个程序可以为 Google 网站管理员工具 除其他外 生成 XML 站点地图 GWT 给我提供了某些站点地图的错误 因为 URL 包含字符序列 如 等 站点地图规范说 https www sitemaps org protocol h
  • “interface”关键字是否从 Dart 中删除了?

    只是为了确定 Dart 是否删除了显式定义interface现在赞成通过隐式定义它abstract 我看到它提到Dart 和接口隔离原则 https stackoverflow com questions 20791286 dart and
  • 对列表中的每个 Id 进行多个 RestTemplate 调用

    我需要制作多个RestTemplate要求每个Id in a List
  • 编写指向其实现者的通用接口的便捷方法

    java中是否有一种编写通用接口的方法 以更方便的方式向此类接口的实现者指出 例如我写的接口 public interface Updatable