三合会不露面打架吗?(Java集缺少项目)

三合会不露面打架吗?(Java集缺少项目),第1张

三合会不露面打架吗?(Java集缺少项目)

问题是,三合会不会出现在战斗中。实际上,在doBattle()开始时立即打印gangs.size()会返回3而不是4。为什么?

双方

triads
grovestreet
有9所以他们来讲等于强度
Gang.compareTo
(实现
Comparable
)。因此,一个中只允许一个
TreeSet

如果您不想删除按排序顺序重复的项目,请不要使用

TreeSet

编辑:

ComparableGang
接口说明指示了所期望的:

public interface ComparableGang extends IGang, Comparable<IGang> {}

你的

compareTo
方法确实 不是 靠力量才下订单-
订单“的标识(名称)”。老实说,它首先是一个非常愚蠢的接口,因为
asoft
创建一个类
public class GangNameComparator :Comparator<IGang>
,然后将其作为树集的比较器(如果他们想按名称排序)将非常容易。

但是,由于他们建议您实施比较,因此您需要按照界面说明进行 *** 作:

public int compareTo(IGang g) {    return name.compareTo(g.getName());}

但是…正如您在评论中(以及Rob的回答中所指出的)所指出的,这与约定俗称的

IGang
描述相矛盾:

public interface IGang {        public int compareTo(IGang g);}

ComparableGang
既要实现自己的文档又要满足文档是不可能的
IGang
。从asoft的角度来看,这基本上是通过设计打破的。

任何代码都应该能够使用

IGang
实现,
了解
IGang
并依赖
IGang
合同之后的实现。但是,asoft通过在扩展接口中要求不同的行为打破了这一假设
IGang

这本来是合理的为他们增添 了更多的要求

ComparableGang
,只要他们没有违反 现行 的规定
IGang

请注意,这是C#和Java之间的重要区别。在C#中,两个具有相同签名的不同接口中的两个函数可以组合为一个继承两个函数的接口,并且这两种方法保持不同且可访问。在Java中,这两种方法由于完全是抽象的并且具有相同的签名,因此被视为相同的方法,而实现组合接口的类仅具有一个这样的方法。因此
在Java中

ComparableGang
是无效的,因为它不能具有满足ComparableGang协定和IGang协定的compareTo()实现。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5475905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存