- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
public void playersListClearBlacklist() {
List<Player> itemsToRemove = new ArrayList<Player>();
for (int i = 0; i < blacklist.size(); i++) {
Player player = blacklist.get(i);
itemsToRemove.add(player);
DBCore.getInstance().deletePlayer(player);
}
blacklist.removeAll(itemsToRemove);
}
pushistayapodmyshka 27.11.2014 15:47 # 0
wvxvw 27.11.2014 17:47 # 0
Анонимус 27.11.2014 17:50 # 0
3.14159265 27.11.2014 17:52 # 0
вут? он об интерфейсе говорит. а как же полиморфизм?
Анонимус 27.11.2014 17:55 # 0
Да, тут всё от типа переменной зависит.
А вот при вызове метода важен *объект* (все методы как-бы виртуальные) а не тип указателя на этот объект.
В отличии, например, от с#, c++ итд
wvxvw 27.11.2014 21:03 # 0
Если бы мы не морочили голову компилятору и прямо так и сказали: "да не List это, а ArrayList", он бы сразу знал какой из методов надо вызвать. А так ему прийдется (возможно) отложить это решение до непосредственного вызова. Я слышал где-то, что компилятор Явы может сам сузить тип до конкретного и выбрать нужный метод еще на этапе компиляции, но не уверен в этом.
bormand 27.11.2014 21:04 # +1
На этапе компиляции - всяко нет. У джавы компилятор очень тупой и дословный. А вот JIT, емнип, может (если видит, что в эту переменную положили именно ArrayList и ничего другого не засунут).
Анонимус 28.11.2014 01:27 # 0
В принципе даже и если и делает, то я не уверен что виртуальный диспатчинг это реально боттлнек джавы)) у нее полно иных боттлнеков.
---
Мне кстати НЕ нравится что методы в джаве виртуальны. Это усложняет проектирование красивого наследования. Почему-то сановцы решили что это сложно-и-ненужно (как и множественное наследование , как и перегрузку операторов итд). Хорошо что в C# это не так.
wvxvw 28.11.2014 01:52 # 0
Я так же не настаиваю на том, что это сильно повлияет на производительность. Смысл в том, что в случае когда конкретный тип известен и защищен областью видимости функции, то использовать интерфейс для этого просто глупо, т.как совсем ничего не дает. Ну и в редких случаях можно наверное нарваться на таблицу с дофига методов, так что это таки отразится на производительности. Совсем недавно попадалась статья Одерски о рекордной невымышленой иерархии наследования включавшей 36 уровней, а если там еще и родственники по материнской линии были, то так и до сотни недолго добраться.
guest 28.11.2014 13:29 # 0
guest 11.02.2017 22:48 # 0
guest 10.03.2017 15:22 # 0
guest 10.03.2017 05:21 # 0
guest 21.01.2017 17:20 # 0
guestinho 12.02.2017 00:21 # +2
bormand 27.11.2014 17:50 # 0
Вроде бы jit умел в таких случаях делать невиртуальный вызов метода конкретного класса.
guest 03.12.2014 02:48 # 0
bormand 03.12.2014 06:53 # 0
guest 31.01.2017 18:22 # 0
inkanus-gray 01.02.2017 17:06 # 0