Hi guys,


Today I found an issue by adding one more configuration file for my
application. We are using version 1.8.0.



It seems that your comparator of ConfigSource only returns -1 and 1; never
0. So, when two config files have the same original, the application
crashes. We have some common configuration files that are not managed by
myself, so I cannot guarantee that the original is unique. But I can
guarantee that original is unique for each application domain, so we have
never issues with priority.



private static ConfigSource[] sortDescending(List<ConfigSource>
configSources)
{
    Collections.*sort*(configSources, new Comparator<ConfigSource>()
    {



*/**          * {@inheritDoc}          */         *@Override
        public int compare(ConfigSource configSource1, ConfigSource
configSource2)
        {
            return (configSource1.getOrdinal() >
configSource2.getOrdinal()) ? -1 : 1;
        }
    });
    return configSources.toArray(new ConfigSource[configSources.size()]);
}

private static List<ConfigSource> sortAscending(List<ConfigSource>
configSources)
{
    Collections.*sort*(configSources, new Comparator<ConfigSource>()
    {



*/**          * {@inheritDoc}          */         *@Override
        public int compare(ConfigSource configSource1, ConfigSource
configSource2)
        {
            return (configSource1.getOrdinal() >
configSource2.getOrdinal()) ? 1 : -1;
        }
    });
    return configSources;
}



When we use the Collection.sort with default TimSort algorithm, Java throws
a "Comparison method violates its general contract!" Exception. Is it not
better to use default comparator of integer in this case?



Thanks,
Marc


-- 
Schorderet Marc
marc.schorde...@gmail.com

Reply via email to