相关疑难解决方法(0)

比较方法违反了其总合同!仅限Java 7

我知道这已经有一段时间了,并且检查了我以前得到的所有答案,但是这个仍然不起作用.

对象'船员'代表有船员和其他物品的船员.比较应该通过比较'assigned_rank',一个int值,如果这两个实例中的值相等,那么'is_trainer',一个布尔值,应该有所不同.

只要它运行java <7,这种方法就很有效.但是从Java 7开始我就得到了这个:

java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeLo(ComparableTimSort.java:714)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:451)
at java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:376)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:182)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at java.util.Collections.sort(Collections.java:155)
at dormas_flightlog.Query.getCrew(Query.java:714)
Run Code Online (Sandbox Code Playgroud)

这是源代码,其中一些有潜在危险的部分已经被评论过,但它仍然不起作用:

public class crew implements Serializable, Comparable<crew> {

private static final long serialVersionUID = 36L;
private int flightID = 0;
private int assigned_rank = 25;
private boolean is_trainer = false;
...


@Override
public int compareTo(crew him) {

    int myRank = this.getAssigned_rank();
    int hisRank = him.assigned_rank;

    if (this == him) {
        return 0; …
Run Code Online (Sandbox Code Playgroud)

compareto java-7

34
推荐指数
3
解决办法
4万
查看次数

在Grails测试中使用Groovy Trait失败

如何在Grails Spock测试中实现Groovy的新特性?每次尝试时,我都会得到一个看起来像这样的堆栈跟踪.我可能不知道Groovy路径有一些限制吗?

JDK版本:

java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
Run Code Online (Sandbox Code Playgroud)

Groovy Verison:

Groovy Version: 2.3.6 JVM: 1.7.0_65 Vendor: Oracle Corporation OS: Linux
Run Code Online (Sandbox Code Playgroud)

Grails版本:

Grails version: 2.4.3
Run Code Online (Sandbox Code Playgroud)

简化代码:

import grails.test.mixin.Mock
@Mock([AnalyticFilters])
trait ControllerTestBase {
public void setupCommonStuff(boolean setupIdCall = false) {
params.devId = TEST_DEV_ID
    // mocking version filter
    params.version = "v${TEST_VERSION}"

    defineBeans{
       CacheService(cacheServiceMock: "createMock")
    }

    CommonParams.parseParams(params)

    cacheMock = applicationContext.getBean("cacheServiceMock")

    if(setupStoreIdCall) {
        cacheMock.demandExplicit.makeCompositeKey(0..20) { List<String> list ->
            def (String uuid, String orgUuid) …
Run Code Online (Sandbox Code Playgroud)

grails groovy spock

6
推荐指数
2
解决办法
1144
查看次数

在wildfly 8.2中的standalone-full.xml中设置系统属性

我在standalone-full.xml中添加了system-properties标记,但它不能在独立模式下工作.但是,如果我在domain.xml中添加相同的标记,则它适用于域模式.

<?xml version='1.0' encoding='UTF-8'?>

<server xmlns="urn:jboss:domain:2.2">

    <extensions>
    ....
    </extensions>

    <system-properties>
        <property name="java.util.Arrays.useLegacyMergeSort" value="true"/>
    </system-properties>
</server>
Run Code Online (Sandbox Code Playgroud)

根据这篇关于jBoss一般配置概念的文章

可以在domain.xml,host.xml和standalone.xml中的多个位置设置系统属性值.

那么standalone-full.xml呢?

我不想通过命令行设置它,甚至不在java代码中.

jboss jboss7.x wildfly wildfly-8

6
推荐指数
1
解决办法
2万
查看次数

如何使用这个堆栈跟踪在Java中调试,而没有提到我自己的类?

这是困难的一个.客户通过崩溃报告向我发送了此堆栈跟踪信息.它没有提到我的应用程序的类,所以我很困惑,从哪里开始寻找.

我的应用是商业桌面应用.崩溃报告是匿名的,因此我无法轻易获得有关崩溃的更多信息.

编辑:一些谷歌搜索和线程跟踪使我得出结论,它是Java 1.7中的零星问题.寻找解决方案......

我该如何进行调试呢?

java.lang.IllegalArgumentException: Comparison method violates its general contract!
        at java.util.TimSort.mergeHi(TimSort.java:868)
        at java.util.TimSort.mergeAt(TimSort.java:485)
        at java.util.TimSort.mergeCollapse(TimSort.java:410)
        at java.util.TimSort.sort(TimSort.java:214)
        at java.util.TimSort.sort(TimSort.java:173)
        at java.util.Arrays.sort(Arrays.java:659)
        at java.util.Collections.sort(Collections.java:217)
        at javax.swing.SortingFocusTraversalPolicy.enumerateAndSortCycle(SortingFocusTraversalPolicy.java:136)
        at javax.swing.SortingFocusTraversalPolicy.getFocusTraversalCycle(SortingFocusTraversalPolicy.java:110)
        at javax.swing.SortingFocusTraversalPolicy.getFirstComponent(SortingFocusTraversalPolicy.java:435)
        at javax.swing.LayoutFocusTraversalPolicy.getFirstComponent(LayoutFocusTraversalPolicy.java:166)
        at javax.swing.DefaultFocusManager.getFirstComponent(DefaultFocusManager.java:120)
        at javax.swing.LegacyGlueFocusTraversalPolicy.getFirstComponent(LegacyGlueFocusTraversalPolicy.java:132)
        at javax.swing.LegacyGlueFocusTraversalPolicy.getDefaultComponent(LegacyGlueFocusTraversalPolicy.java:150)
        at java.awt.FocusTraversalPolicy.getInitialComponent(FocusTraversalPolicy.java:169)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:380)
        at java.awt.Component.dispatchEventImpl(Component.java:4731)
        at java.awt.Container.dispatchEventImpl(Container.java:2287)
        at java.awt.Window.dispatchEventImpl(Window.java:2719)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:682)
        at java.awt.EventQueue$3.run(EventQueue.java:680)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
        at java.awt.EventQueue$4.run(EventQueue.java:696)
        at java.awt.EventQueue$4.run(EventQueue.java:694)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) …
Run Code Online (Sandbox Code Playgroud)

java swing

5
推荐指数
1
解决办法
789
查看次数

Java-如何对TimSort和“违反常规合同”进行单元测试

此问题与“比较方法违反其一般合同!”有关。-TimSort和GridLayout 以及其他一些类似的“违反通用合同”问题。我的问题特别与Ceekay在页面底部有关“如何测试TimSort实现的答案”有关。就我而言,我已修复了由于对称性违规而导致我出现此问题的应用程序错误,但是我无法创建一个单元测试来暴露该违规(如果将来对修补程序进行注释或未修正)。

public class TickNumber implements Comparable<TickNumber> {
    protected String zone;
    protected String track;
}
public class GisTickNumber extends TickNumber implements Comparable<TickNumber> {
    private String suffix;
}
Run Code Online (Sandbox Code Playgroud)

我省略了所有实现细节,但是基本上,刻度号是4位数字,其中前两位是区域,后两位是磁道。GisTickNumbers在“区域”或“跟踪”字段中可以包含字母字符,并且可以选择包含一个或两个字符的字母后缀。有效刻度是该范围内的所有整数[0000, 9999](即使表示为字符串)。所有有效的刻度线编号都是有效的Gis刻度线编号,但有效的Gis刻度线也可能类似于A912, R123, 0123G, A346*

我的对称性违反是在GisTick中compareTo,我考虑了可能的后缀,但在普通Tick中,compareTo我没有考虑它。因此,如果“ this”是一个0000Tick,而“ that”是一个0000*Gis Tick,0000.compareTo(0000*)则将返回0。而如果“ this”是一个0000*Gis Tick,并且“ that”是一个0000Tick,0000*.compareTo(0000)则将返回1。护罩拉回)

根据Ceekay在对链接问题的回答中,

  1. 创建包含32个或更多对象的列表。
  2. 在该列表中,需要[是]两个或多个运行。
  3. 每次运行必须包含3个或更多对象。

满足这三个条件后,就可以开始测试此失败了。

我相信我已经为单元测试设置了这样的TickNumber(和GisTickNumber)对象列表,但我似乎无法使测试失败。即使列表中有100个以上的对象,也有两个以上的运行,每个运行包含约10个对象。因此,我的问题是,Collections.sort(testList)由于“一般(对称)合同违约”而导致调用失败,被测对象列表还需要满足哪些其他特征?

  • 是的,在运行预期会失败的单元测试之前,我已注释掉该修复程序。

java unit-testing timsort

5
推荐指数
1
解决办法
301
查看次数

"比较方法违反其一般合同"仅在某些情况下被抛出

首先,我知道许多其他线程都描述了这个问题.但是我无法找到并回答这个问题,为什么不总是抛出这个错误?

让我来描述一下我的意思.我写了一些示例代码来说明这一点:

public class Mushroom {

    public int size;

    public Mushroom(int size) {
        this.size = size;
    }

    @Override
    public boolean equals(Object obj) {
        //this is intentionally false - read in description
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

DSA

public class MushroomComparator implements Comparator<Mushroom> {

    @Override
    public int compare(Mushroom o1, Mushroom o2) {
        // here is the code which breaks the contract
         if (o1.size < o2.size){
             return 1;
         }else if(o1.size >o2.size){
             return -1;
         }
         return 1;
    }

}
Run Code Online (Sandbox Code Playgroud)

最后测试比较:

public class ComparisonTest { …
Run Code Online (Sandbox Code Playgroud)

java comparator

4
推荐指数
1
解决办法
3513
查看次数