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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблоны, работа со своими классами, составить "шаблонный" список своих кла.. 
:(
    Опции темы
oguretzz
Дата 18.9.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile Господа, я новичок в яве и никак не могу понять одну вещь. Есть ли в яве какой-то аналог шаблонов, как с си++. Как мне составить список (шаблонный, т.е. встроенный) из объектов классов, определенных программисом? В си++ все было как-то понятно - определяешь для своего класса нужные операции (+-==<>) а потом через шаблоны STL можно создать список и, например, отсортировать его, или вектор.. в яве то как это делается. надо самому все описывать, или можно использовать уже написанные методы. Если можно пример со списком состоящим из объектов класса, определенного пользователем. Заранее спасибо...
PM MAIL   Вверх
powerOn
Дата 18.9.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



В java очень сильно развита переносимость кода. Стандартная библиотека имеет много классов для решения стандартных задач.

Цитата(oguretzz @  18.9.2006,  22:27 Найти цитируемый пост)
Если можно пример со списком состоящим из объектов класса, определенного пользователем.


Пожалуйста:

Код

import java.util.ArrayList;
import java.util.Iterator;

class MessagePrinter {
    private String message = "";
    
    public MessagePrinter(String message) {
        this.message = message;
    }
    
    public void printMessage() {
        System.out.println(getMessage());
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

public class Main {
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        MessagePrinter mp1 = new MessagePrinter("first message.");
        MessagePrinter mp2 = new MessagePrinter("second message.");
        MessagePrinter mp3 = new MessagePrinter("third message.");
      
        ArrayList aList1 = new ArrayList();
        aList1.add(mp1);
        aList1.add(mp2);
        aList1.add(mp3);
        
        ArrayList<MessagePrinter> aList2 = new ArrayList<MessagePrinter>();
        aList2.add(mp1);
        aList2.add(mp2);
        aList2.add(mp3);
        
        printMessages(aList1);
        printMessages(aList2);
    }
    
    public static void printMessages(ArrayList mList) {
        System.out.println();
        Iterator<MessagePrinter> it = mList.iterator();
        while (it.hasNext()) {
             it.next().printMessage();
        }
    }
}


А вообще про коллекции можно почитать здесь


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
batigoal
Дата 19.9.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Добавлю, что механизм generic'ов, проиллюстрированный кодом powerOn, появился только в Java 1.5, так что если у тебя более старая версия, то код немного изменится.

Добавлено @ 09:26 
Цитата(oguretzz @  18.9.2006,  22:27 Найти цитируемый пост)
В си++ все было как-то понятно - определяешь для своего класса нужные операции (+-==<>)

Операторы в Java переопределять нельзя. Единственное исключение - класс String.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
powerOn
Дата 19.9.2006, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(batigoal @  19.9.2006,  10:24 Найти цитируемый пост)
 Единственное исключение - класс String.


Это как?



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
batigoal
Дата 19.9.2006, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата(powerOn @  19.9.2006,  10:38 Найти цитируемый пост)
Это как?

Код

String str = str1 + str2

Переопределен оператор +.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
powerOn
Дата 19.9.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Ну тогда оператор + перегружен не только для String, но и для некоторых других числовых типов. Например такой код не выполнится:
Код

byte a = 1;
byte b = 1;
byte c = a + b;


поскольку оператор "+" сначала преобразует значение a и b к типу int (расширение типа), потом выполнится сложение, в результате получим сумму a и b ввиде int значения. Но что бы int привести к byte потребуется явное преобразование, кое отсутствует. Это привидет к ошибке компиляции (possible loss of precision).

Такой код, конечно же, пройдет без проблем:
Код

int a = 1;
int b = 1;
int c = a + b;


Так что оператор + (да и некоторые другие арифметические операторы) по разному ведет себя в зависимости от типа операндов. Я думаю, это можно считать перегрузкой...




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
batigoal
Дата 19.9.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Я говорил о перегрузке в рамках ссылочных типов. Простые типы - это, конечно, отдельная песня.


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

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

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


 




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


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

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