Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оболочки клаассы простых типов и операторы +,-,*,/, как эта реализована; эта операторы? 
V
    Опции темы
bytes
Дата 24.6.2008, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.10.2006
Где: Baku

Репутация: нет
Всего: нет



Код

    Integer i = new Integer(3);
    Integer j = new Integer(5);
    Integer k = i * j; // или  - * /

Как эта реализована. В Джаве нет операторов.
--------------------
?==! or !==?
PM MAIL ICQ MSN   Вверх
w1nd
Дата 24.6.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54





--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
bytes
Дата 24.6.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.10.2006
Где: Baku

Репутация: нет
Всего: нет



OK Sposibo!
--------------------
?==! or !==?
PM MAIL ICQ MSN   Вверх
bytes
Дата 24.6.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.10.2006
Где: Baku

Репутация: нет
Всего: нет



А как быть если я хочу создат "новой" класс, например: Int32
Код

public class Test{

public static void main(String arg[])throws Exception{

    Int32  x1 = new Int32(3), x2 = new Int32(8), x;
    x = x1 + x2;
    System.out.println("Int32 Plus Operation =" + x );
}

}

class Int32{

         int i;

         public Int32() { i = 0; }

         public Int32(int x) { i = x; }

         int intValue() { return i; }

}


Это сообщение отредактировал(а) bytes - 24.6.2008, 16:48
--------------------
?==! or !==?
PM MAIL ICQ MSN   Вверх
LSD
Дата 24.6.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(bytes @  24.6.2008,  17:46 Найти цитируемый пост)
А как быть если я хочу создат "новой" класс, например: Int32

Никак, ни перегрузить для него оператор, ни добавть для него autoboxing - нельзя.
Только добавить в него методы add(), mul() и т.д.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
bytes
Дата 24.6.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.10.2006
Где: Baku

Репутация: нет
Всего: нет



А как эта с Int, Short, Long -ом происходит тогда? Волшебство smile 
--------------------
?==! or !==?
PM MAIL ICQ MSN   Вверх
Dummy
Дата 24.6.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 9
Всего: 19



Не волшебство, а javac smile Компилятор делает грязную работу за программистов. Надо поклоняться ему, а не посягать на его права smile  И autoboxing, и операторы - это уже системная кухня, недоступная для изменения на уровне простого смертного Java-программиста. Они имеют вполне ограниченное число типов, для которых они определены. Детали вот здесь: Java Language Specification

Это сообщение отредактировал(а) Dummy - 24.6.2008, 22:37
PM MAIL   Вверх
bytes
Дата 25.6.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.10.2006
Где: Baku

Репутация: нет
Всего: нет



Эта минус... или операторы не должны были быть,  или доступно для программера.
--------------------
?==! or !==?
PM MAIL ICQ MSN   Вверх
Dummy
Дата 25.6.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 9
Всего: 19



Цитата(bytes @  25.6.2008,  00:39 Найти цитируемый пост)
Эта минус... или операторы не должны были быть,  или доступно для программера. 

Сильное высказывание)))
Вообще, перегрузка операторов и ее отсутствие в Java - это уже, ИМХО, из разряда холиваров. Лично я склоняюсь к тому, что нет ее - и не нужна она. Потому что список типов, для которых перегруженные операторы могут иметь более-менее однозначный смысл, весьма ограничен, и в основном это примитивные типы. С введением автобоксинга эффект перегрузки для типов Int, Short и т. п. был создан. Что касается более сложных типов, всяческих пользовательских классов и т. д. - тут лучше все же создать функцию с ясным именем, из которого становится понятно, что делает эта функция, без лишнего копания по документации, вместо того, чтобы творить оператор + или -, который работает некоторым образом, очевидным только для его создателя.
PM MAIL   Вверх
SoulKeeper
Дата 25.6.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



Операторы в джаве есть... В ее диалекте... с++ называется ;)

Ну а если серьезно, то пишите на с++, ну или на чем душе угодно, и будет вам счастье.

А если бы джаве были бы всякие бяки по типу *указателей и прочего, то это уже не была бы джава, а очередной с++, только запускался бы он в JVM. 

Да и как сказал LSD, куда нагляднее создать статический метод MyClass.add(object1, object2) чем гадать что же означает этот плюсик, и почему вдруг оно работает не так smile

Это сообщение отредактировал(а) SoulKeeper - 25.6.2008, 14:45
PM MAIL   Вверх
Shaggie
Дата 25.6.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 4
Всего: 72



Цитата(SoulKeeper @  25.6.2008,  15:41 Найти цитируемый пост)
куда нагляднее создать статический метод MyClass.add(object1, object2) чем гадать что же означает этот плюсик

Окей, представь что у тебя есть класс Matrix, и сложение матриц производится вызовом метода add существующего объекта, в качестве аргумента передаётся второй объект (ссылка указывает на идентичный метод библиотеки commons-math). Не кажется, что использование оператора + было бы вполне уместно?

Что есть, то есть. Идеология Java заключается в упрощении синтаксических конструкций. Если кому-то хочется большей свободы на базе JVM, рискну предложить попробовать на вкус scala, там можно играться с перегрузкой операторов.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
SoulKeeper
Дата 26.6.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



Цитата(Shaggie @  25.6.2008,  15:17 Найти цитируемый пост)
Не кажется, что использование оператора + было бы вполне уместно


Оно то уместно, но с другой стороны прийдется учитывать много разных кейсов т.к.

Код

[def + (that: Complex) =
      new Complex(re + that.re, im + that.im)
]


1). Неизвестно что собой являет + для re + that.re, и как глубого оно идет
2). Неизвестно как обрабатывать всякие єксепшены, если вдруг одно проперти окажется null
3). Еше много кейсов которые вылезут в процессе активного использования

В общем, на вкус и цвет, но, по моему, куда лутше использовать наглядные вызовы чем экономить на спичках (десятке букв для вызова smile)
PM MAIL   Вверх
Shaggie
Дата 26.6.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 4
Всего: 72



Цитата(SoulKeeper @  26.6.2008,  14:02 Найти цитируемый пост)
1). Неизвестно что собой являет + для re + that.re, и как глубого оно идет
2). Неизвестно как обрабатывать всякие єксепшены, если вдруг одно проперти окажется null
3). Еше много кейсов которые вылезут в процессе активного использования

То же самое можно сказать и про вызов add()  smile  Вся разница между ними укладывается в два пункта, где первый - это использование в названии метода одного символа вместо трёх букв, а второй - семантическая наглядность использования оператора + против чтения названия метода add(AnotherObject). А метод на самом деле один и тот же.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
SoulKeeper
Дата 26.6.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



Нельзя.

В джаве я на 100% уверен что 2+2 = 4, а так я еше должен лезть в обьект и смотреть что за тип у филда, как обрабатывается + и прочее в том же духе. 

Такие вещи осложняют чтение кода.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1406 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.