Java 如何更改不同类中枚举变量的值?

Java 如何更改不同类中枚举变量的值?,java,sorting,enums,Java,Sorting,Enums,我目前正在做一个项目,要求我对一组歌曲进行排序。 我正在使用此问题中提出的解决方案来完成此任务,同时对其进行轻微修改: 我希望能够在运行每个相应的sortField方法时更改sortingBy变量,这样它就可以运行正确的比较方法。但是,我在方法中定义它的方式只是创建一个新的sortingBy变量,而根本不更改songparator类中的变量。您没有设置比较器的sortingBy字段: comparator.setSortingBy(sortingBy); Collections.sort(son

我目前正在做一个项目,要求我对一组歌曲进行排序。 我正在使用此问题中提出的解决方案来完成此任务,同时对其进行轻微修改:


我希望能够在运行每个相应的
sortField
方法时更改
sortingBy
变量,这样它就可以运行正确的比较方法。但是,我在方法中定义它的方式只是创建一个新的
sortingBy
变量,而根本不更改
songparator
类中的变量。

您没有设置比较器的
sortingBy
字段:

comparator.setSortingBy(sortingBy);
Collections.sort(songs2, comparator);
最好将此值作为构造函数参数传递,以确保比较器始终处于有效状态,并且不会重现错误:

SongComparator comparator = new SongComparator(SongComparator.Order.TITLE_SORT);
Collections.sort(songs2, comparator);
顺便说一下,
sortingBy
字段不应该是公共的,而且
sortingBy
字段不应该有setter

为了使类更易于使用和更友好,我将创建工厂方法:

public static SongComparator byTitle() {
    return new SongComparator(SongComparator.Order.TITLE_SORT);
}

public static SongComparator byYear() {
    return new SongComparator(SongComparator.Order.YEAR_SORT);
}
...
使调用者中的代码变为:

Collections.sort(songs2, SongComparator.byTitle());
注意,在Java8中,这个比较器类变得不必要了。你可以简单地使用

Collections.sort(songs2, Comparator.comparing(Song::getTitle));

你的问题是什么?最好让内部枚举实现
比较器
;这将是非常干净的。对不起,我无意中提交了一个没有填写完整的问题。
Collections.sort(songs2, SongComparator.byTitle());
Collections.sort(songs2, Comparator.comparing(Song::getTitle));