powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 8 - уже не совсем Java?
25 сообщений из 448, страница 12 из 18
Java 8 - уже не совсем Java?
    #39195033
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,
Тот случай когда хотел сумничать а в результате пернул в лужу. Причём тут вообще свойства массива? Речь исключительно о данных внутри, гетерогенность которых приводит к необходимости делать проверку типа в коде.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195588
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Blazkowiczот случай когда хотел сумничать а в результате пернул в лужу.

Я тоже вот что-то такое подумал, когда твоё сообщение прочитал.
Где тут гетерогенность то? Чем ссылка на Object отличается от ссылки на Object, а? Чо теперь, любая ковариантная коллекция в Джаве стала гетерогенной ?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195599
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverЯ тоже вот что-то такое подумал, когда твоё сообщение прочитал.

Что-то подумал, но не понял что?

DoSOfRedRiverГде тут гетерогенность то?
В данных. Сколько раз это нужно написать чтобы до тебя дошло?

DoSOfRedRiverЧем ссылка на Object отличается от ссылки на Object, а? Чо теперь, любая ковариантная коллекция в Джаве стала гетерогенной ?
У тебя ещё и с логикой туго? То что коллекция может содержать гетерогенные данные ещё не значит что данные в ней действительно гетерогенные. И то что данные гетерогенные в данном конкретном случае, ещё не значит что все коллекции имеют гетерогенные данные. Урок логики окончен. Переваривай.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195605
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо того, чтобы спорить о том, какой термин глубже объясняет смысл природы вещей, объяснил бы чем проверка на instance of отличается от проверки значения поля?
Или ты предлагаешь хранить в коллекциях только абсолютно тождественные объекты?
Может TC действие, в котором важно, что там строка или не строка важно только раз в год.
А во всех остальных случаях нужен именно Object.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195630
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, DosOfRedRiver

девочки не ссортьесь. Пустяк ведь. Топик нормальный. Нормально обсуждаем. К чему нам закрытие.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195662
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевВместо того, чтобы спорить о том, какой термин глубже объясняет смысл природы вещей, объяснил бы чем проверка на instance of отличается от проверки значения поля?
Да, прописные истины , вроде

From Effective C++, by Scott MeyersAnytime you find yourself writing code of the form "if the object is of type T1, then do something, but if it's of type T2, then do something else," slap yourself

Касательно проверки на тип. Гетерогенные данные приводят к тому что тебе нужно писать такую проверку в каждом месте, где ты собрался их использовать.
Касательно проверки поля, это практически так же плохо, так как доступ к полю не виртуален. Мало того он ещё и инкапсуляцию, в большинстве случаев, нарушает, учитывая приведенный код.

Сергей АрсеньевИли ты предлагаешь хранить в коллекциях только абсолютно тождественные объекты?

И эти люди предлагают мне не спорить о терминологии. "Тождественность" здесь каким боком вообще. Я предлагаю не хранить в коллекциях объекты разных типов. Если у тебя массив типа Object, то оперировать ты должен только методами типа Object с этим массивом. Если тебе приходится смотреть внутрь каждого объекта, чтобы понять можешь ли ты им оперировать, то значит где-то ты уже наговнокодил.

Сергей Арсеньев Может TC действие, в котором важно, что там строка или не строка важно только раз в год.
А во всех остальных случаях нужен именно Object.
Может это уже обсуждение сферических коней в вакууме? Частота выполнения кода как относится к его качеству вообще? Или опять качество меряем производительностью?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195756
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczDoSOfRedRiverГде тут гетерогенность то?
В данных. Сколько раз это нужно написать чтобы до тебя дошло?

DoSOfRedRiverЧем ссылка на Object отличается от ссылки на Object, а? Чо теперь, любая ковариантная коллекция в Джаве стала гетерогенной ?
У тебя ещё и с логикой туго? То что коллекция может содержать гетерогенные данные ещё не значит что данные в ней действительно гетерогенные. И то что данные гетерогенные в данном конкретном случае, ещё не значит что все коллекции имеют гетерогенные данные. Урок логики окончен. Переваривай.

Ага. То есть, сначала у нас были:

BlazkowiczГетерогенные коллекции и массивы

а теперь появились "гетерогенные данные". Можно узнать, что это за отношение гетерогенности такое?

Давай ещё раз, постарайся: Object [] - это массив указателей на Object. Он [массив] не является гетерогенным, не содержит "гетерогенных данных". Что такое гетерогенная коллекция я уже объяснил. Есть что по существу возразить?


mayton,

Обсуждение терминологии - важная часть индустрии. А по стилистике - всё ОК, никто на личности не переходит.
Самому хочется знать. ВДРУГ я не прав.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195762
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевВместо того, чтобы спорить о том, какой термин глубже объясняет смысл природы вещей, объяснил бы чем проверка на instance of отличается от проверки значения поля?
Или ты предлагаешь хранить в коллекциях только абсолютно тождественные объекты?
Может TC действие, в котором важно, что там строка или не строка важно только раз в год.
А во всех остальных случаях нужен именно Object.

Тут соглашусь с Blazkowicz. Как правило, такие вот сигнатуры - зло во коде, и нафиг не нужны. Почти любую функцию можно переписать без Object.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195792
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,

Натянул сову на глобус. Молодец.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39195805
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverМожно узнать, что это за отношение гетерогенности такое?
То самое, которое требует instanceof String

DoSOfRedRiverОн [массив] не является гетерогенным, не содержит "гетерогенных данных".
Весь интернет пользуется, а у тебя "не является".
http://stackoverflow.com/questions/16363547/how-to-declare-an-array-of-different-data-types

DoSOfRedRiverЧто такое гетерогенная коллекция я уже объяснил.
Объяснил он. Теперь гуглу объясни:
https://www.google.com/search?q=define: heterogenous collection
https://wiki.haskell.org/Heterogenous_collections Does some kind of collection of objects with different types in Haskell exist?
Вопросы?

DoSOfRedRiverЕсть что по существу возразить?

Ты тут не первый кто пытается таким способом самоутвердится. Но уж если обосрался, имей смелость в этом признаться хотя бы себе.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39196217
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Слушай, ты меня утомил.

BlazkowiczТо самое, которое требует instanceof String
instanceof требуется чтобы не словить ошибку приведения типов.
А это твоё отношение как-то записывается, или оно только в твоей голове существует, и на математический язык не перекладывается?


BlazkowiczDoes some kind of collection of objects with different types in Haskell exist?
Классно, выдрал цитатку из статьи про ДРУГОЙ ЯЗЫК который НЕ ПОДДЕРЖИВАЕТ ООП. Я могу тебе эссе на "Идиота" Достоевского запостить сюда.
btw, если дальше читал, там написано следующее:
https://wiki.haskell.org/Heterogenous_collections Obviously, tuples are an example, but they have a fixed length. To compare tuples vs lists:
Tuples - Heterogeneous
Lists - Homogeneous

Ты так и не ответил на вопрос:
DoSOfRedRiverЧо теперь, любая ковариантная коллекция в Джаве стала гетерогенной?

Если так, то можешь не отвечать дальше, нам не о чем поговорить будет.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39196746
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverСлушай, ты меня утомил.

Хорошая попытка вызвать жалость. Но нет.

DoSOfRedRiverА это твоё отношение как-то записывается, или оно только в твоей голове существует, и на математический язык не перекладывается?
Какой нахрен математический язык? Мы тут что дисер защищаем?

DoSOfRedRiverКлассно, выдрал цитатку из статьи про ДРУГОЙ ЯЗЫК который НЕ ПОДДЕРЖИВАЕТ ООП. Я могу тебе эссе на "Идиота" Достоевского запостить сюда.

Тебе удобно не замечать всех остальных ссылок из гугла. Ну, что же. Бывает. ООП тут вообще при чем??? Типизация есть? Так вот речь о ней.

DoSOfRedRivertuples vs lists:
Tuples - Heterogeneous
Lists - Homogeneous
А вот это уже конкретика хаскеля. Но тебя этот факт мало волнует. Ты готов за любую нелепость зацепиться?

DoSOfRedRiverТы так и не ответил на вопрос:
DoSOfRedRiverЧо теперь, любая ковариантная коллекция в Джаве стала гетерогенной?
Ты так и не понял ответ. Речь не о коллекции как типе и её свойствах, речь о коллекции как наборе данных.

DoSOfRedRiverЕсли так, то можешь не отвечать дальше, нам не о чем поговорить будет.
Ну, так и не истери, если тебе не о чем говорить.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39196753
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот никому не известный сайт пишет:
Коллекция может хранить объекты только одного или различных типов. Во втором случае говорят о гетерогенной коллекции.

А вот никому не известный автор
http://www.k-press.ru/cs/2008/3/generic/generic.asp Теория и практика Java. Эксперименты с generic-методами
Автор: Брайен Гетц
...
С другой стороны, raw-тип List является гетерогенным;
...

Оригинал, если вдруг кто-то решит что это отсебятина переводчика
http://www.ibm.com/developerworks/library/j-jtp04298/

Ну, что? Тут уже не так просто ляпнуть, что Хаскель это не ООП язык, поэтому термины типизации там совсем не такие?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39197167
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,

Всё я понял, причину твоего заблуждения. Ты увидел, что тип параметра Object[], и ты знаешь что это не очень хорошо и решил что именно по этой причине я называю такой массив гетерогенным. А это не так. Object[] это, конечно, не очень хорошо, но это не корень проблемы, а её следствие. Проблема в том что автор в этом массиве хранит гетерогенную коллекцию, которая требует от него явных проверок на тип. Это ключевая проблема. То есть речь идёт не о коллекции-типе, как тебе показалось, а о коллекции-объекте, как состоянии. И это не только ключевая проблема, но и на много более критичная проблема, по сравнению с использованием типа Object[]. Что тоже не фонтан, но, не вызывает таких проблем.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198035
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczКасательно проверки на тип. Гетерогенные данные приводят к тому что тебе нужно писать такую проверку в каждом месте, где ты собрался их использовать.

Этак мы дойдем до - нафиг нужно наследование? Или куча хреновый способ размещать объекты в памяти - все превращает в свалку. :)
Не везде где собрался использвать, а там гда от этого что-то зависит.
Если у людей вся логика построена на вызове метода hashCode() и equals()
Или вообще это коллекция со списком мониторов. Зачем им разные списки?

Да ТС может захотел на время засунуть туда логгер для строк - ему надо проверять строка не строка. Но основную логику перефигачивать ради такой задачи глупо, IMHO.


Blazkowicz Я предлагаю не хранить в коллекциях объекты разных типов.

Хорошее решение в 99% случаев.

BlazkowiczМожет это уже обсуждение сферических коней в вакууме? Частота выполнения кода как относится к его качеству вообще? Или опять качество меряем производительностью?
Он самый в вакууме. Хороший код это тот, который делает то что нужно и не делает того, что не нужно. Если этот код выполняет что-то нужное за приемлемое время, а с разнесеннием по 100500 коллекций простую операцию получения итератора превращает в танцы с бубном, то это плохо.
Если же для каждого типа объекта нужен свой обработчик, то свалка это плохо.

P.S. Да и свалка у ТС могла возникнуть по наследству. В этом случае совет - это плохо равнозначен совету игроку в тетрис - не туда надо было. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198044
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев Этак мы дойдем до - нафиг нужно наследование?

Для наследования есть полиморфизм, который проблему решает.

Сергей Арсеньев Если у людей вся логика построена на вызове метода hashCode() и equals()
Когда вся логика построена на hashCode() и equals(), то список у нас условно гомогенный. Когда человеку нужно писать if(o instanceof String), то список резко становиться гетерогенным. Потому что для нас по критерию String/не String уже как минимум два разных типа.

Сергей Арсеньев Или вообще это коллекция со списком мониторов. Зачем им разные списки?
Зачем монитору toLowerCase()?

Сергей Арсеньев Да ТС может захотел на время засунуть туда логгер для строк - ему надо проверять строка не строка. Но основную логику перефигачивать ради такой задачи глупо, IMHO.
Глупо потом писать if ... instanceof в каждом методе где используется эта коллекция.

Сергей АрсеньевP.S. Да и свалка у ТС могла возникнуть по наследству. В этом случае совет - это плохо равнозначен совету игроку в тетрис - не туда надо было. :)
И автор вместо того чтобы разгрести свалку переводит код на стримы. Да?
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198079
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСергей Арсеньев Или вообще это коллекция со списком мониторов. Зачем им разные списки?
Зачем монитору toLowerCase()?
...
И автор вместо того чтобы разгрести свалку переводит код на стримы. Да?
Автору могли дать вспомогательную задачу. Ну там отследить что за хрень стала появляться? А для основной (мониторы) toLowerCase нафиг не нужна.
Это одна ситуация.

Если же toLowerCase нужна постоянно в основной логике - совсем другая.

Вот и все что я хотел сказать. То что гомогенно для одного, может быть гетерогенно для другого.

P.S. Хотя использовать String как монитор, например, уже само по себе можно считать моветоном. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198185
13-й Пилигрим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, хотелось бы пояснить необходимость Object[] и toLowerCase() и, по возможности, выслушать советы по улучшению.

Вся задача вертится вокруг Infinispan в целом и Querying via the Java Hot Rod client в частности.
Для работы с кэшем, размещенным на удаленном сервере, Infinispan Предлагает использовать собственный протокол Hot Rod , а для поиска собственный же Query DSL

Примерно вот так это выглядит
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import org.infinispan.client.hotrod.*;
import org.infinispan.query.dsl.*;
...

RemoteCacheManager remoteCacheManager = ...;
RemoteCache<Integer, Book> remoteCache = remoteCacheManager.getCache();

Book book1 = new Book();
book1.setTitle("Hibernate in Action");
remoteCache.put(1, book1);

Book book2 = new Book();
book2.setTile("Infinispan Data Grid Platform");
remoteCache.put(2, book2);

QueryFactory qf = Search.getQueryFactory(remoteCache);
Query query = qf.from(Book.class)
            .having("title").in("Hibernate in Action", "Infinispan Data Grid Platform").toBuilder()
            .build();

List<Book> list = query.list(); // Voila! We have our book back from the cache!



Т.е.
Код: java
1.
FilterConditionContext in(Object... values);


ну, или
Код: java
1.
FilterConditionContext in(Collection values);



Имеется собственная обертка - что-то типа QueryBuilderWrapper, которая строит query. Враппер в качестве параметра принимает некий SearchBean
Код: java
1.
2.
3.
4.
public class SearchBean {
	private String field;
	private Object[] values;
}


Т.к. враппер строит query для любых полей и, соответственно, любых типов хранимых значений, требуется Object. А т.к. значений для поиска м.б. несколько, требуется Object[]

А toLowerCase нужен для регистронезависимого поиска.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198214
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й ПилигримА toLowerCase нужен для регистронезависимого поиска.
Спасибо за разъяснения, но они никак не объясняют надобности в гетерогенных значениях для поиска.
field у вас один. Значит все values должны соответствовать его типу. Так ведь? Значит там либо все String, либо все Integer, либо все значения другого одинакового типа. Поэтому вполне можно, например, через method overload конструировать SearchBean для String не так как для других типов (с нормализацией регистра). Из каких данных вы этот SearchBean собираете? Почему там не String[], например?
Как у вас в values может попасть одновременно String и другой тип?

Ну, и безотносительно проблемы, нормализация параметров поиска требует ведь и нормализации данных. То есть к регистронезависимому поиску такое решение не особо относится.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198247
13-й Пилигрим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСпасибо за разъяснения, но они никак не объясняют надобности в гетерогенных значениях для поиска.
field у вас один. Значит все values должны соответствовать его типу. Так ведь? Значит там либо все String, либо все Integer, либо все значения другого одинакового типа.
Да, верно - для одного филда значения могут быть только одного типа.

BlazkowiczПоэтому вполне можно, например, через method overload конструировать SearchBean для String не так как для других типов (с нормализацией регистра).
Да, этот вариант выглядит предпочтительным.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
	public SearchBean(String field, Object... values){
		this.field = field;
		this.values = values;
	}

	public SearchBean(String field, String... values){
		this.field = field;
		this.values = Arrays.stream(values).map(String::toLowerCase).toArray();
	}



BlazkowiczКак у вас в values может попасть одновременно String и другой тип?
Правильно, не может.

BlazkowiczНу, и безотносительно проблемы, нормализация параметров поиска требует ведь и нормализации данных. То есть к регистронезависимому поиску такое решение не особо относится.
Конечно, данные в кэше тоже нормализованы.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198253
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13-й ПилигримДа, этот вариант выглядит предпочтительным.

Скажем решительное "нет" копипасте и "да" самодокументированому коду.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	public SearchBean(String field, Object... values){
		this.field = field;
		this.values = values;
	}

	public SearchBean(String field, String... values){
		this(field, toLowerCase(values)));
	}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39198277
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Код: java
1.
2.
3.
	public SearchBean(String field, String... values){
		this(field, toLowerCase(values)));
	}


А может и так.
Код: java
1.
2.
3.
	public SearchBean(String field, String... values){
		this(field, transform(values, String::toLowerCase)));
	}
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39199825
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСкажем решительное "нет" копипасте и "да" самодокументированому коду.

Главное, чтоб это самодокументация дошла до разработчиков того сервиса, которые будут дергать бин. А то веди их будет ждать сюрприз, когда они пришлют Object[] содержащий строки и они не преобразуются к маленьким буквам.
Но скорее всего это сам ТС и он в курсе. :)
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39199831
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Это не сервис же.
...
Рейтинг: 0 / 0
Java 8 - уже не совсем Java?
    #39202281
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сабжу.

Прошло уже немало (сколько?) лет с момента публикации пары статей некого Африканца
под названием Околожабство.

http://izm.izvm.net/zhaba/java-a.htm

http://izm.izvm.net/zhaba/java-b.htm

Я не предлагаю сейчас обсуждать его личность или сами статьи а просто
хочу посмотреть и добавить что изменилось с тех пор и что уже не есть TRUE.

Поскольку в чтениях статей и - медленный покемон - то можете
писать свои каменты раньше меня.
...
Рейтинг: 0 / 0
25 сообщений из 448, страница 12 из 18
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 8 - уже не совсем Java?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]