Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / коллекции / 14 сообщений из 14, страница 1 из 1
25.06.2007, 14:55:09
    #34617580
parrish
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
подскажите, пожалуйста, как типизировать коллекции
...
Рейтинг: 0 / 0
25.06.2007, 15:05:15
    #34617630
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
Generic'и
авторimport java.util.Hashtable;

class Test {
public static void main(String[] args) {
Hashtable<Integer, String> h = new Hashtable<Integer, String>();
h.put(new Integer(0), "value");
...
}
}
или переопределять коллекции и instanceof. Проверять типы объектов.
...
Рейтинг: 0 / 0
25.06.2007, 15:06:39
    #34617638
parrish
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
гмм...а можете, пожалуйста, без кода - в теории объяснить, что делать
...
Рейтинг: 0 / 0
25.06.2007, 15:11:39
    #34617673
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
вам нужно переопределить методы get, add и вставить в него код проверки типа объекта который должна хранить коллекция. Чтобы этого не делать создали Generic'и.
...
Рейтинг: 0 / 0
25.06.2007, 15:35:48
    #34617791
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
ТимоНвам нужно переопределить методы get, add и вставить в него код проверки типа объекта который должна хранить коллекция. Чтобы этого не делать создали Generic'и.

имхо в корне неверно. <Generics> и java.util.Collections.checkedXxx() два совершенно отличных друг от друга решения. (и конечно же руками ничего писать не надо)
...
Рейтинг: 0 / 0
25.06.2007, 16:15:17
    #34617985
alx3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
expp:
Ну структурное различие понятно, в случае <Generics> в рантайме коллекции будут не типизированные. А вот в скорости от этого будет плюс или минус?
...
Рейтинг: 0 / 0
25.06.2007, 16:25:12
    #34618024
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
авторимхо в корне неверно. <Generics> и java.util.Collections.checkedXxx() два совершенно отличных друг от друга решения. (и конечно же руками ничего писать не надо)
Поясните...
Как вы хотите создать типизированную коллекцию в 1.4 ?

автордва совершенно отличных друг от друга решения.
Ок. Для чего нудны джинерики?
...
Рейтинг: 0 / 0
25.06.2007, 16:26:00
    #34618029
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
alx3expp:
Ну структурное различие понятно, в случае <Generics> в рантайме коллекции будут не типизированные. А вот в скорости от этого будет плюс или минус?
Монопенисуально. Сами ведь ответили: "в рантайме коллекции будут не типизированные".
...
Рейтинг: 0 / 0
25.06.2007, 16:43:35
    #34618109
alx3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
Timm
Хм, странно.
Вроде у дженериков "compile-time (static) type checking", а CheckedCollection это "dynamically typesafe view of the specified collection".
Наверное динамическая проверка должна замедлять работу?
...
Рейтинг: 0 / 0
25.06.2007, 17:01:27
    #34618176
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
alx3Timm
Хм, странно.
Вроде у дженериков "compile-time (static) type checking", а CheckedCollection это "dynamically typesafe view of the specified collection".
Наверное динамическая проверка должна замедлять работу?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 import  java.util.*;
 public   class  testColl 
{
     public   static   void  main(String[] args) 
    {
        Map<String, String> t1 =  new  HashMap<String, String>();

        t1.put("test", "test");

        String s = t1.get("test"); // line num = 10

        Map t2 =  new  HashMap();

        t2.put("test", "test");

        s = (String) t2.get("test"); // line num = 16
    }
}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 public   static   void  main(java.lang.String[]);
  LineNumberTable:
   line  6 :  0 
   line  8 :  8 
   line  10 :  19 
   line  12 :  31 
   line  14 :  39 
   line  16 :  50 
   line  17 :  62 

  Code:
   Stack= 3 , Locals= 4 , Args_size= 1 
    0 :    new      # 2 ; //class java/util/HashMap
    3 :   dup
    4 :   invokespecial   # 3 ; //Method java/util/HashMap."<init>":()V
    7 :   astore_1
    8 :   aload_1
    9 :   ldc     # 4 ; //String test
    11 :  ldc     # 4 ; //String test
    13 :  invokeinterface # 5 ,   3 ; //InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    18 :  pop
    19 :  aload_1
    20 :  ldc     # 4 ; //String test
    22 :  invokeinterface # 6 ,   2 ; //InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
    27 :  checkcast       # 7 ; //class java/lang/String
    30 :  astore_2
    31 :   new      # 2 ; //class java/util/HashMap
    34 :  dup
    35 :  invokespecial   # 3 ; //Method java/util/HashMap."<init>":()V
    38 :  astore_3
    39 :  aload_3
    40 :  ldc     # 4 ; //String test
    42 :  ldc     # 4 ; //String test
    44 :  invokeinterface # 5 ,   3 ; //InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    49 :  pop
    50 :  aload_3
    51 :  ldc     # 4 ; //String test
    53 :  invokeinterface # 6 ,   2 ; //InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
    58 :  checkcast       # 7 ; //class java/lang/String
    61 :  astore_2
    62 :   return 
...
Рейтинг: 0 / 0
25.06.2007, 17:43:18
    #34618328
alx3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
Как и ожидалось, байткод одинаковый.
А если вместо
Код: plaintext
Map<String, String> t1 =  new  HashMap<String, String>();
написать
Код: plaintext
Map<String, String> t1 = Collections.checkedCollection( new  HashMap<String, String>(), String. class );
тогда согласно доке проверка должна стать динамической.
Интересно стало посмотреть, что изменится; приду с работы поиграюсь с коллекциями, посмотрю checkedCollection поподробнее.
Подскажите, чем вы байткод открываете?
...
Рейтинг: 0 / 0
25.06.2007, 18:18:25
    #34618442
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
alx3Как и ожидалось, байткод одинаковый.
А если вместо
Код: plaintext
Map<String, String> t1 =  new  HashMap<String, String>();
написать
Код: plaintext
Map<String, String> t1 = Collections.checkedCollection( new  HashMap<String, String>(), String. class );
тогда согласно доке проверка должна стать динамической.
Интересно стало посмотреть, что изменится; приду с работы поиграюсь с коллекциями, посмотрю checkedCollection поподробнее.
Подскажите, чем вы байткод открываете?
1. Вы путаете понятия. Collections.checked* нужны, в первую очередь, для отладки старого кода, написанного без помощи compile-time type checking. С байт кодом ничего не произойдет. Просто коллекция обернется в "правильную", которая будет кидать ClassCastException сразу же при добавлении, а не в момент собственно каста.
2. стандартно, javap.
...
Рейтинг: 0 / 0
25.06.2007, 18:55:24
    #34618532
alx3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
Спасибо!
Теперь стало более понятно.
...
Рейтинг: 0 / 0
25.06.2007, 21:29:25
    #34618730
parrish
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
коллекции
да, спасибо!!мне теперь тоже)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / коллекции / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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