问题是,三合会不会出现在战斗中。实际上,在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()实现。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)