Регистрация  |  Вход

Как узнать что текущий класс является полноценным экземпляром а не просто ссылкой на другой класс ?

Как узнать что текущий класс является полноценным экземпляром а не просто ссылкой на другой класс ?

Как узнать что текущий класс является полноценным экземпляром а не просто ссылкой на другой класс ?

wilder
Как узнать что текущий класс является полноценным экземпляром а не просто ссылкой на другой класс ?

Что ты под этим понимаешь?

[quote="wilder"]Как узнать что текущий класс является полноценным экземпляром а не просто ссылкой на другой класс ?[/quote]
Что ты под этим понимаешь?

wilder
класс является полноценным экземпляром

Что-то с твоими терминами не так)

[quote="wilder"]класс является полноценным экземпляром[/quote]
Что-то с твоими терминами не так)

Gres
wilder
класс является полноценным экземпляром

Что-то с твоими терминами не так)

Ок. Объясню по-другому.

У меня есть класс скажем А.

Я делаю Б = A. Если меняю А соответственно меняется и Б. Если я делаю new Б и присваиваю каждое свойство А в Б тогда все нормально.

[quote="Gres"][quote="wilder"]класс является полноценным экземпляром[/quote]
Что-то с твоими терминами не так)[/quote]

Ок. Объясню по-другому.

У меня есть класс скажем А. 

Я делаю Б = A. Если меняю А соответственно меняется и Б. Если я делаю new Б и присваиваю каждое свойство А в Б тогда все нормально.

wilder
Как узнать что текущий класс является полноценным экземпляром а не просто ссылкой на другой класс ?

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

Но вопрос можно поставить по=другому. Как понять что две ссылки указывающие на идентичные экземпляры с одинаковым содержанием полей указывают на один и тот же экземпляр или все-таки на два разных объекта?

ну это я так понял.

[quote="wilder"]Как узнать что текущий класс является полноценным экземпляром а не просто ссылкой на другой класс ?[/quote]

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

Но вопрос можно поставить по=другому. Как понять что две ссылки указывающие на идентичные экземпляры с одинаковым содержанием полей указывают на один и тот же экземпляр или все-таки на два разных объекта?

ну это я так понял.

Тебе нужно определить является ли класс чьим-то наследником?
Напиши конкретный пример и проблему.

Тебе нужно определить является ли класс чьим-то наследником?
Напиши конкретный пример и проблему.

Может я правильно понимаю и надо определить экземпляр создан через new, а не через какую-то другую переменную?
Если так, то просто сравнение == должно помочь с той переменной, на которую ты можешь подумать.

Может я правильно понимаю и надо определить экземпляр создан через new, а  не через какую-то другую переменную?
Если так, то просто сравнение == должно помочь с той переменной, на которую ты можешь подумать.

Если тебе надо узнать не ссылаются ли два объекта одну и ту же область памяти, то выход есть - "===" exact equality operator:

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

Если тебе надо узнать не ссылаются ли два объекта одну и ту же область памяти, то выход есть - "===" 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]

ilya leshchuk
exact equality operator

А вот за это спасибо. Я такое обычно только в JS использовал.

[quote="ilya leshchuk"]exact equality operator[/quote]

А вот за это спасибо. Я такое обычно только в JS использовал.

ilya leshchuk
"==="

О, млин, а такое в Salesforce есть? не знал.

[quote="ilya leshchuk"]"==="[/quote]
О, млин, а такое в Salesforce есть? :D не знал.

Dmitry Shnyrev
ilya leshchuk
"==="

О, млин, а такое в Salesforce есть? не знал.

Там много чего есть, посмотри справку по операторам, я думаю она тебя удивит.

[quote="Dmitry Shnyrev"][quote="ilya leshchuk"]"==="[/quote]
О, млин, а такое в Salesforce есть? :D не знал.[/quote]
Там много чего есть, посмотри справку по операторам, я думаю она тебя удивит.

Показывать пример на строках плохо, если честно)

Показывать пример на строках плохо, если честно)

Кст, на счет строк, в СФ тоже есть пул строк, как в java, никто не сталкивался?

Кст, на счет строк, в СФ тоже есть пул строк, как в java, никто не сталкивался?

RasMisha
Показывать пример на строках плохо, если честно)

Так там и не только строки, к тому же это не столь важно - теперь просто человек знает куда копать и сам разберётся, а как мне показалось это как раз то что wilder искал.

Gres
Кст, на счет строк, в СФ тоже есть пул строк, как в java, никто не сталкивался?

Судя по тому, что я прочитал про пул строк и по "плохому примеру"
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

он таки есть.

[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]

он таки есть.

ilya leshchuk
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-классов все равно можно производить через ==. (вот эта неоднозначность вымораживает)

ilya leshchuk
Судя по тому, что я прочитал про пул строк

Мало кто знает тонкости работы JVM, а это очень полезно, даже для СФ разработчика

[quote="ilya leshchuk"]Судя по тому, что я прочитал про пул строк[/quote]
Мало кто знает тонкости работы JVM, а это очень полезно, даже для СФ разработчика

wilder
А вот за это спасибо. Я такое обычно только в JS использовал.

+1

ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?

[quote="wilder"]А вот за это спасибо. Я такое обычно только в JS использовал.[/quote]

+1

ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?

Den Brown
ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?

Реализовать компаратор, тут и обсуждать нечего.

[quote="Den Brown"]ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?[/quote]
Реализовать компаратор, тут и обсуждать нечего.

Den Brown
как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?

String.valueof(a) это если простое сравнение. Или тебе нужно найти все различные поля?

Похоже тупанул:) не мудрено у нас +32.

[quote="Den Brown"]как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?[/quote]

String.valueof(a) это если простое сравнение. Или тебе нужно найти все различные поля?

Похоже тупанул:) не мудрено у нас +32.

Gres
Реализовать компаратор, тут и обсуждать нечего.

его на каждый кастомный класс нужно отдельно реализовывать?

[quote="Gres"]Реализовать компаратор, тут и обсуждать нечего.[/quote]

его на каждый кастомный класс нужно отдельно реализовывать?

wilder
String.valueof(a) это если простое сравнение.

получается здесь я просто "серилизую" объект и сравниваю? дешево, но сердито...

[quote="wilder"]String.valueof(a) это если простое сравнение. [/quote]

получается здесь я просто "серилизую" объект и сравниваю? дешево, но сердито...

Den Brown
ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?

А может заодно новый топик создать?

Gres
Реализовать компаратор, тут и обсуждать нечего.

+1

[quote="Den Brown"]ну ладно, раз решили основной вопрос, давайте обсудим смежный: как в апексе можно сравнить два разных экземпляра класса на предмет одинаковости содержания их полей?[/quote]

А может заодно новый топик создать?

[quote="Gres"]Реализовать компаратор, тут и обсуждать нечего.[/quote]
+1

ilya leshchuk
А может заодно новый топик создать?

да, много тем на форуме можно было бы собрать в пришпиленный ЧаВо...

[quote="ilya leshchuk"]А может заодно новый топик создать?[/quote]

да, много тем на форуме можно было бы собрать в пришпиленный ЧаВо...

Den Brown
wilder
String.valueof(a) это если простое сравнение.

получается здесь я просто "серилизую" объект и сравниваю? дешево, но сердито...

+1 за реализовать компаратор. Сериализация это сильно медленнее. Плюс способов сравнения объектов может быть несколько

[quote="Den Brown"][quote="wilder"]String.valueof(a) это если простое сравнение. [/quote]

получается здесь я просто "серилизую" объект и сравниваю? дешево, но сердито...[/quote]

+1 за реализовать компаратор. Сериализация это сильно медленнее. Плюс способов сравнения объектов может быть [b]несколько[/b]