您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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

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

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

/** An `IGang` ordered by identity (name) */
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 {
    /** @return negative, 0, or positive, respectively
     *          if this gang is weaker than, equal to, or stronger
     *          than the other
     */
    public int compareTo(IGang g);
}

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

任何代码都应该能够使用IGang实现, 了解IGang并依赖IGang合同之后的实现。但是,asoft通过在扩展接口中要求不同的行为打破了这一假设IGang

这本来是合理的为他们增添 了更多的要求ComparableGang,只要他们没有违反 现行 的规定IGang

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

java 2022/1/1 18:31:03 有484人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶