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
[email protected]