Я предпочитаю использовать поле static
для экземпляров классов, которые не сохраняют его состояние в полях вместо анонимных-внутренних классов. Я думаю, что эта хорошая практика для уменьшения объема памяти и использования GC, если метод sort
(или другой) вызывает очень часто. Но мой коллега предпочитает использовать анонимные внутренние классы для этого случая, говоря, что JIT оптимизирует его.anonymous-internal-classes vs static field
class MyClass {
//non fields of class
/*access modifier*/ final static Comparator<MyClass> comparator = new Comparator<MyClass>(){
public compare(MyClass o1, MyClass o2){
//comparing logic
}
}
}
Пример использования (я предпочитаю):
List<MyClass> list = ...;
Collection.sort(list, MyClass.comparator);
Пример использования (мой коллега предпочитает):
List<MyClass> list = ...;
Collection.sort(list, new Comparator<MyClass>(){
public compare(MyClass o1, MyClass o2){
//comparing logic
}
});
1. Использование анонимных внутренних-классы в OpenJDK оптимизированы?
2. Пожалуйста, расскажите, пожалуйста, хорошую практику для этого случая.
Nitpick: ваш собственный пример на самом деле не имеет смысла. Поскольку у MyClass есть только один порядок, и он знает об этом, он должен просто реализовать 'Comparable', вместо того, чтобы иметь статическое поле' compator' типа 'Comparator '. –
ruakh
Ваш вопрос действительно - «анонимные-внутренние классы против названных классов». И мой ответ будет заключаться в том, что анонимные-внутренние классы созданы для более быстрого и легкого написания кода, но при необходимости вы всегда должны использовать более читаемые именованные классы с возможностью повторного использования. – Elist
@ruakh Это гипотетический пример. Вместо компаратора может быть другой класс. –