当前位置: 首页 > 面试题库 >

如何使接口实例方法仅接受相同类的参数?

尉迟阳煦
2023-03-14
问题内容

我想使用这样的接口:

public interface ResultItem {
    public int getConfidence();
    public boolean equals(ResultItem item);
    public ResultItem cloneWithConfidence(int newConfidence);
}

我用代表语音识别结果的不同类型的对象来实现它。

我的想法是,我只希望比较相同类型的结果。也就是说,如果我创建一个IntResult实现的类ResultItem,我希望方法签名变为:

public boolean equals(IntResult item);
public IntResult cloneWithConfidence(int newConfidence);

我觉得我的界面存在设计缺陷,因为到目前为止,我对cloneWithConfidence和返回ResultItem的其他方法的结果使用了非常难看的转换。

有没有更好的办法?


问题答案:

有一个经常见到的成语如下:

public interface ResultItem<T extends ResultItem<T>> {
    public int getConfidence();
    public boolean equals(T item);
    public T cloneWithConfidence(int newConfidence);
}

public class IntResult implements ResultItem<IntResult> {
  //...
}


 类似资料:
  • 问题内容: 该SO讨论提出以下惯用法: 然后允许: 但是,此惯用语不仅允许以上内容,而且还可以编译以下代码: 因此(除非我误解了一些东西),与不那么戏剧性的相比,原始成语并没有买更多的东西: 那么,有没有一种方法可以真正地声明一个接口,以便任何声明要实现的类都具有与自己的类的对象进行比较的方法,而没有上述任何漏洞? 我显然不能将以上内容发表为评论,因此我创建了一个新帖子。 问题答案: 你是正确的:

  • B类: 如何影响这个界面?

  • 问题内容: 我发现情况: 问题答案: 您同时满足这两个条件;即。一种实现是同时满足抽象类要求和接口要求。 注意,除非在另一个继承链中使用,否则不需要它。另外,将其移至抽象类定义可能很有意义。

  • 问题内容: 说我有两个结构: 我希望他们都实现接口A: 像这样对First和Second结构都实现似乎是多余的: 有没有一种方法可以为实现接口A的所有结构提供一个实现?像这样的东西,但似乎不起作用: 谢谢! 问题答案: 不,您不能, 但是 您可以创建一个基本类型,然后将其嵌入到您的2结构中,因此只需要一个基本类型的实现即可: 用法: 操场上的完整例子 嵌入文件

  • 问题内容: 假设我必须实现在两个不同的包中声明的两个不同的接口(在两个不同的独立项目中)。 我有包装 并包装 在我的包里 如何处理这种情况? 问题答案: 正如常见问题解答所提到的 其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱。 在Go的类型系统中,仅按名称进行匹配并要求类型一致是简化的主要决定 。 在您的情况下,您将满足两个接口。 您可

  • 问题内容: 此代码完美地工作。方法test()适用于两个接口。幕后到底发生了什么?在实际情况下,此功能有何用处? 问题答案: 因为它是一个接口,所以不会造成任何危害。通过实现和,您基本上是在为您的课程使用蓝图。双方并说,应实施一个名为方法 您的类实现了该方法,因此接口已完成其工作。 基本上,您的班级在说:“哦,我需要因为接口而实现”,然后您就实现了。然后您的班级说:“哦,嘿,由于接口我需要再次实现