[quote="Gres"][quote="wilder"]класс является полноценным экземпляром[/quote]
Что-то с твоими терминами не так)[/quote]
Ок. Объясню по-другому.
У меня есть класс скажем А.
Я делаю Б = A. Если меняю А соответственно меняется и Б. Если я делаю new Б и присваиваю каждое свойство А в Б тогда все нормально.
Как узнать что текущий класс является полноценным экземпляром а не просто ссылкой на другой класс ?
я так понял ситуацию. Был инициализирован экземпляр класс. Этот экземпляр в виде ссылок на него разошелся по всеми миру. Как понять что это изначальная переменная, указывающая на экземпляр или последующие ссылки на него. Я думаю что никак. И изначальная, и последующие - это все ссылки на одну ячейку в памяти, и они все равны между собой, и среди них не найти "первого среди равных".
Но вопрос можно поставить по=другому. Как понять что две ссылки указывающие на идентичные экземпляры с одинаковым содержанием полей указывают на один и тот же экземпляр или все-таки на два разных объекта?
[quote="wilder"]Как узнать что текущий класс является полноценным экземпляром а не просто ссылкой на другой класс ?[/quote]
я так понял ситуацию. Был инициализирован экземпляр класс. Этот экземпляр в виде ссылок на него разошелся по всеми миру. Как понять что это изначальная переменная, указывающая на экземпляр или последующие ссылки на него.
Я думаю что никак. И изначальная, и последующие - это все ссылки на одну ячейку в памяти, и они все равны между собой, и среди них не найти "первого среди равных".
Но вопрос можно поставить по=другому. Как понять что две ссылки указывающие на идентичные экземпляры с одинаковым содержанием полей указывают на один и тот же экземпляр или все-таки на два разных объекта?
ну это я так понял.
Тебе нужно определить является ли класс чьим-то наследником? Напиши конкретный пример и проблему.
Тебе нужно определить является ли класс чьим-то наследником?
Напиши конкретный пример и проблему.
Может я правильно понимаю и надо определить экземпляр создан через new, а не через какую-то другую переменную? Если так, то просто сравнение == должно помочь с той переменной, на которую ты можешь подумать.
Может я правильно понимаю и надо определить экземпляр создан через new, а не через какую-то другую переменную?
Если так, то просто сравнение == должно помочь с той переменной, на которую ты можешь подумать.
Если тебе надо узнать не ссылаются ли два объекта одну и ту же область памяти, то выход есть - "===" exact equality operator:
Object a = new User(Name = 'a'); Object b = new User(Name = 'a');
Если тебе надо узнать не ссылаются ли два объекта одну и ту же область памяти, то выход есть - "===" exact equality operator:
[code]
Object a = new User(Name = 'a');
Object b = new User(Name = 'a');
System.debug(a == b);//true
System.debug(a === b);//false
b = a;
System.debug(a === b);//true
b.Name = 'b';
System.debug(a === b);//true
System.debug(a == b);//true
a = 'a';
b = 'a';
System.debug(a == b);//true
System.debug(a === b);//false
a = 'a';
b = a;
System.debug(a == b);//true
System.debug(a === b);//true
b = 'a';
System.debug(a == b);//true
System.debug(a === b);//false
[/code]
exact equality operator
А вот за это спасибо. Я такое обычно только в JS использовал.
[quote="Dmitry Shnyrev"][quote="ilya leshchuk"]"==="[/quote]
О, млин, а такое в Salesforce есть? :D не знал.[/quote]
Там много чего есть, посмотри справку по операторам, я думаю она тебя удивит.
Кст, на счет строк, в СФ тоже есть пул строк, как в java, никто не сталкивался?
Показывать пример на строках плохо, если честно)
Так там и не только строки, к тому же это не столь важно - теперь просто человек знает куда копать и сам разберётся, а как мне показалось это как раз то что wilder искал.
Кст, на счет строк, в СФ тоже есть пул строк, как в java, никто не сталкивался?
Судя по тому, что я прочитал про пул строк и по "плохому примеру"
[quote="RasMisha"]Показывать пример на строках плохо, если честно)[/quote]
Так там и не только строки, к тому же это не столь важно - теперь просто человек знает куда копать и сам разберётся, а как мне показалось это как раз то что wilder искал.
[quote="Gres"]Кст, на счет строк, в СФ тоже есть пул строк, как в java, никто не сталкивался?[/quote]
Судя по тому, что я прочитал про пул строк и по "плохому примеру"
[code]
a = 'a';
b = a;
System.debug(a == b);//true
System.debug(a === b);//true
b = 'a';
System.debug(a == b);//true
System.debug(a === b);//false
[/code]
он таки есть.
System.debug(a === b);//false
Как интересно ты сравгивал - Exact equality operators only allowed for reference types: String Fixed: Понятно. На сам деле удивлен ошибке.
[quote="ilya leshchuk"]System.debug(a === b);//false[/quote]
Как интересно ты сравгивал - Exact equality operators only allowed for reference types: String
Fixed: Понятно.
На сам деле удивлен ошибке.
Блин, что-то я не заметил пример с User'ом Вот еще одна причина почему я ненавижу переопределение операторов Да, надо завязывать с маппингом java на apex )
Ну и сравнение экземпляров plain-классов все равно можно производить через ==. (вот эта неоднозначность вымораживает)
Блин, что-то я не заметил пример с User'ом
Вот еще одна причина почему я ненавижу переопределение операторов :(
Да, надо завязывать с маппингом java на apex )
Ну и сравнение экземпляров plain-классов все равно можно производить через ==. (вот эта неоднозначность вымораживает)
Судя по тому, что я прочитал про пул строк
Мало кто знает тонкости работы JVM, а это очень полезно, даже для СФ разработчика
[quote="ilya leshchuk"]Судя по тому, что я прочитал про пул строк[/quote]
Мало кто знает тонкости работы JVM, а это очень полезно, даже для СФ разработчика
А вот за это спасибо. Я такое обычно только в JS использовал.
+1
ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?
[quote="wilder"]А вот за это спасибо. Я такое обычно только в JS использовал.[/quote]
+1
ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?
ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?
[quote="Den Brown"]ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?[/quote]
Реализовать компаратор, тут и обсуждать нечего.
как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?
String.valueof(a) это если простое сравнение. Или тебе нужно найти все различные поля?
[quote="Den Brown"]как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?[/quote]
String.valueof(a) это если простое сравнение. Или тебе нужно найти все различные поля?
Похоже тупанул:) не мудрено у нас +32.
Реализовать компаратор, тут и обсуждать нечего.
его на каждый кастомный класс нужно отдельно реализовывать?
[quote="wilder"]String.valueof(a) это если простое сравнение. [/quote]
получается здесь я просто "серилизую" объект и сравниваю? дешево, но сердито...
ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?
[quote="Den Brown"]ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?[/quote]
А может заодно новый топик создать?
[quote="Gres"]Реализовать компаратор, тут и обсуждать нечего.[/quote]
+1
А может заодно новый топик создать?
да, много тем на форуме можно было бы собрать в пришпиленный ЧаВо...
[quote="Den Brown"][quote="wilder"]String.valueof(a) это если простое сравнение. [/quote]
получается здесь я просто "серилизую" объект и сравниваю? дешево, но сердито...[/quote]
+1 за реализовать компаратор. Сериализация это сильно медленнее. Плюс способов сравнения объектов может быть [b]несколько[/b]