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