Разобрать код на java

248
31 января 2018, 14:07
public void sortAmmunitionsByCost() {
        System.out.println("*******SORTING BY COST********");
        Collections.sort(ammunitions, new Comparator() {
            public int compare(Object o1, Object o2) {
                Ammunition a1 = (Ammunition) o1;
                Ammunition a2 = (Ammunition) o2;
                if (a1.getCost() > a2.getCost()) {
                    return 1;
                }
                if (a2.getCost() > a1.getCost()) {
                    return -1;
                }
                return 0;
            }
        });
    }

Помогите подробно разобрать этот код - я не понимаю здесь в метод вложен метод?

Answer 1

Приведенный вами код более-менее идентичен коду:

public void sortAmmunitionsByCost() {
     System.out.println("*******SORTING BY COST********");
    Collections.sort(ammunitions, new MyComparator());
}
class MyComparator implements Comparator {
   public int compare(Object o1, Object o2) {
            Ammunition a1 = (Ammunition) o1;
            Ammunition a2 = (Ammunition) o2;
            if (a1.getCost() > a2.getCost()) {
                return 1;
            }
            if (a2.getCost() > a1.getCost()) {
                return -1;
            }
            return 0;
        }
 }

В вашем примере просто приведена укороченная форма его записи, где применяется т.н. анонимный класс, то есть чтобы не городить огород вокруг класса MyComparator, который все равно используется только один раз - применена конструкция с анонимным классом.

Почитайте туториал по анонимным классам

Answer 2

Метод sort в данном случае принимает два аргумента - список ammunitions и компаратор.

В данном случае вы просто не можете сравнить два объекта класса Ammunition одним оператором сравнения (>, <, >=, <=).

Вам необходимо передать функцию, в данном случае compare, в теле которой необходимо реализовать сравнение объектов этого класса. В Вашем коде сравниваются поля cost, путем получения их значений через геттеры (getCost()).

READ ALSO
Java распределение запросов

Java распределение запросов

Стакчане здраствуйтеНаписал сервис rest

236
ListFragment из изображений

ListFragment из изображений

Здравствуйте, хочу создать лист из картинок как в этом приложении:

141
TabLayout &gt; FragmentOut &gt; FragmentIn &gt; RecyclerView

TabLayout > FragmentOut > FragmentIn > RecyclerView

Возможно ли в такой цепочке реализовать RecyclerView при такой вложенностиИ как нужно осуществлять транзакции?

183
Как сделать Button в Activity - рисовалке (GraphicsView/Draw2D)?

Как сделать Button в Activity - рисовалке (GraphicsView/Draw2D)?

Полистав страницы интернета "молодой падаван" понял что любую графику рисуют в новом классе наследуемом от View и создают объект в классе Draw2d...

204