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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> баги в Java 
:(
    Опции темы
ShamanTrirukiy
Дата 31.5.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не придумал куда запостить, так что пишу сюда.
Первый - прикол с типизацией(правда, надо написать Sun-у, может так задумано?)
Код

public class Test<T> {

  private T field;
  
  public Test() {

  }

  /**
   * @param args
   */
  public static void main(String[] args) {
    Test<Integer> c1 = new Test<Integer>();
    testMethod(c1);
    int i = c1.field;
  }
  
  public static void testMethod(Test t) {
    t.field = ""; 
  }
}


консоль:
Цитата

Exception in thread "main" java.lang.ClassCastException: java.lang.String
    at var.Test.main(Test.java:18)


Минус тут в том, что присвоение происходит вполне нормально, а вот обращение к полю радует нас исключением  smile  
По-моему, было бы логичней его получать уже при присвоении.

Второй баг(стабилен в Eclipse3.2 в дебаггере, в других IDE не проверял):

Код

import java.util.*;

public class CollectionsBug {
  public static void main(String[] args) {
    new CollectionsBug().buggyMethod();
  }

  public void buggyMethod() {
    for (Object o : new HashSet<Object>()) {//на эту строку необходимо поставить breakpoint
      System.out.println(o);
      continue;
    }
  }
}


консоль:
Цитата

# Java VM: Java HotSpot™ Client VM (1.5.0_06-b05 mixed mode)
# Problematic frame:
# V  [jvm.dll+0xf3937]
#
# An error report file with more information is saved as hs_err_pid9216.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#


Правда мило?  smile 

Вот, собственно, и всё, натыкался на другие баги, но они были только на моей машине, посему их не публикую.
Может, кому-то это пригодится.

Если кто-то знает ещё какие-то баги - пишите.   

Это сообщение отредактировал(а) ShamanTrirukiy - 31.5.2006, 18:57
PM MAIL   Вверх
Tirael
Дата 31.5.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

int i = c1.field;

Не понял ??? ты создаешь объект и обращаешся к его полю, которое объявлено как private. ? 
Естественно будет ошибка .....

Щас разберем второй примечик ..... 

Это сообщение отредактировал(а) Tirael - 31.5.2006, 19:16
--------------------
 
PM MAIL   Вверх
s8e8r8g8e
Дата 31.5.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



- не очень то занимался генериками, но 1й..  скорее всего изза того что метод объявлен как получающий просто Test, а не Test<?> , по умочанию видимо параметры это Object, при передаче параметра в такую функцию параметризация тоже не учитывается, внутри ты обджекту присваиваешь строку, что нормально а потом пытаешься int присвоить строку.. логично что класскаст, едиственно это у меня почти на кофейной гуще(надо бы спеки покопать, что происходит если так метод написать smile), но скорее всего это не баг
- про второе, в какой момент ошибка, при останове или продолжении?, я просто в Netbeans 5.0 попробовал и ничего такого не увидел, а сломать можно всё что угодно.. никто не мешает эклипсу здесь чтонибудь этакое сделать, главное понять что и насколько критично, т.е. чия больше заслуга.. сана или эклипса smile
вот из дебаггера моего всё что вылезло:
Код

Listening on 3810
User program running
Breakpoint hit at line 22 in class javaapplication2.CollectionsBug by thread main.
Thread main stopped at CollectionsBug.java:22.
User program running
User program finished


Добавлено @ 19:17 
Цитата(Tirael @ 31.5.2006,  19:15)
Цитата

int i = c1.field;

Не понял ??? ты создаешь объект и обращаешся к его полю, которое объявлено как private. ? 
Естественно будет ошибка .....

Щас разберем второй примечик .....

не будет, ведь весь код в рамках одного класса, да и ошибка не о том.. 
PM MAIL   Вверх
ShamanTrirukiy
Дата 31.5.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Tirael @  31.5.2006,  19:15 Найти цитируемый пост)
Не понял ??? ты создаешь объект и обращаешся к его полю, которое объявлено как private. ? 

Tirael, не хочется тебя расстраивать, класс имеет доступ не только  к своим private-полям, но ещё и ко всем private-полям inner-классов. А если при попытке обращения к методу, к которому не доступа у тебя, во-первых не будет матюкаться компилятор, а во-вторых, вылетит ClassCastException - я тебе памятник поставлю и по-почте его перешлю. Просьба - перед тем, как что-то писать - ДУМАТЬ.
Цитата(Tirael @  31.5.2006,  19:15 Найти цитируемый пост)

Естественно будет ошибка .....

В том то ж и дело, что ошибка не в этом!!! Ошибка в том, что поле заполняется НЕВЕРНЫМ значением, а ClassCastException вылетает только при обращении к этому полю. 

Упс. Не увидел пост s8e8r8g8e

Добавлено @ 19:44 
Цитата(s8e8r8g8e @  31.5.2006,  19:16 Найти цитируемый пост)
не очень то занимался генериками, но 1й..  скорее всего изза того что метод объявлен как получающий просто Test, а не Test<?> , по умочанию видимо параметры это Object, при передаче параметра в такую функцию параметризация тоже не учитывается, внутри ты обджекту присваиваешь строку, что нормально а потом пытаешься int присвоить строку.. логично что класскаст, едиственно это у меня почти на кофейной гуще(надо бы спеки покопать, что происходит если так метод написать smile), но скорее всего это не баг

Именно. Просто пример показал, чтоб люди на подобное не наткнулись. А вот по-поводу баг или нет - 
Цитата(ShamanTrirukiy @  31.5.2006,  18:54 Найти цитируемый пост)
По-моему, было бы логичней его получать уже при присвоении.

 

Это сообщение отредактировал(а) ShamanTrirukiy - 31.5.2006, 19:39
PM MAIL   Вверх
LSD
Дата 31.5.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(ShamanTrirukiy @  31.5.2006,  19:54 Найти цитируемый пост)
Минус тут в том, что присвоение происходит вполне нормально, а вот обращение к полю радует нас исключением    
По-моему, было бы логичней его получать уже при присвоении.

Это не минус, особенность работы генериков. Генерики существуют только на этапе компиляции, и соответсвенно все проверки тоже идут только на этапе компиляции. При чтении из поля ошибка вылетает, из-за того что поле на самом деле имеет тип Object и перед присвоением производится приведение. А при присвоении значения полю, никакого приведения типов не производится. Вообщем поведение такое же как в программе без генериков с явным приведением типов.
Вообще от генериков будет толк только если при компиляции не было варнингов, а в данном случае они были.

Рекомендую почитать Generics in the Java Programming Language - Gilad Bracha, этот документик можно поискать на Сановском сайте. 


--------------------
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   Вверх
Tirael
Дата 31.5.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(ShamanTrirukiy @  31.5.2006,  19:39 Найти цитируемый пост)
 Просьба - перед тем, как что-то писать - ДУМАТЬ.

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


Шустрый
*


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

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



Цитата(ShamanTrirukiy @  31.5.2006,  18:54 Найти цитируемый пост)
Если кто-то знает ещё какие-то баги - пишите.

http://bugs.sun.com/bugdatabase/index.jsp smile 
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.0791 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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