• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Вопросы по Jave.

  • Автор темы Dymytry
  • Дата начала
D

Dymytry

Товарищи, объясните, пожалуйста, как:

1)
есть цикл который что-то делает. как его прервать по нажатию кнопки на форме?
пока этот цикл что-то делает я не смогу взаимодейстовать с приложением если не работаю с multitreads, так?
задача такая: надо чтобы кажду минуту оно делало некий запрос, в остальное время хотелось бы чтобы приложение было свободно.

2) я попробовал разместить две своих таблицы, унаследованных от JTable на форме. Но к величайшему сожалению, оно не работает: вот в таком виде не показываются обе таблицы, хотя по отдельности первая показывалась. Что не так?

Код:
		JFrame frame = new JFrame("Swing Example Window");
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();

JTabbedPane tabs = new JTabbedPane();
ATable aTable = new ATable(); // мой класс унаследованный от таблицы. если использовать JTable то то же самое.
BTable bTable = new BTable();

JPanel panelAB = new JPanel();

JScrollPane scrollPaneA = new JScrollPane(aTable);
JScrollPane scrollPaneB = new JScrollPane(bTable);

scrollPaneA.add(aTable);
scrollPaneB.add(bTable);
panelAB.add(scrollPaneA);
panelAB.add(scrollPaneB);

JScrollPane scrollPaneC = new JScrollPane();
tabs.addTab("A tab", panelAB);
tabs.addTab("C tab", scrollPaneC);
contentPane.add(tabs);

frame.setVisible(true);

3) Для образования:

3.1 Зачем нужна библиотека Spring?

3.2 Часто ли используют Google Web Toolkit? Ведь как я понял он генерит код автоматом, а это не очень хорошо.

3.3 Делают ли вообще сайты на JSP. Если да, то в чем их плюсы?

3.4 При резком изменении размеров моих окон, созданных на Jave, я замечаю что границы окна как бы двоятся, дергаются, иногда проступает черный фон на который с задержкой наезжают мои Controls. Короче, медленно прорисовывает, хотя сама программа не тормозит. У меня DualCore 3ГБ, хотя и с плохой видеокартой, но на native окнах такого нет. Это что?
 
L

LuMee

есть цикл который что-то делает. как его прервать по нажатию кнопки на форме?
пока этот цикл что-то делает я не смогу взаимодейстовать с приложением если не работаю с multitreads, так?
задача такая: надо чтобы кажду минуту оно делало некий запрос, в остальное время хотелось бы чтобы приложение было свободно.
Ну тут полюбому надо делать отдельный поток. В потоке будет цикл, в теле которого осуществляется запрос и засыпание на минуту. Для реализации возможности остановки цикла, в твоем классе, расширяющем Thread, можно завести некое поле, которое в цикле будет проверяться. Как только оно устанавливается в определенное значение, цикл останавливается. Будет типа такого (за абсолютную точность не ручаюсь, явой давно не пользовался):
Код:
public class TheThread extends Thread {
private volatile bool isStopRequested = false;

public void run() {
// если isStopRequested выставится в true, поток завершится
while(!this.isStopRequested) { 
... // сделать какой-то запрос
wait(60000); // спим минуту
}
}

public void requestStop() {
this.isStopRequested = true;
}
}

2) я попробовал разместить две своих таблицы, унаследованных от JTable на форме. Но к величайшему сожалению, оно не работает: вот в таком виде не показываются обе таблицы, хотя по отдельности первая показывалась. Что не так?
Сдается мне, проблема в том, что обе таблицы ты кладешь на одну панель, не устанавливая layout-менеджера, в результате чего одна таблица просто перекрывает вторую. Установи менеджер, и все должно быть ОК. Пример:
Код:
...
panelAB.setLayout(new BorderLayout());
panelAB.add(scrollPaneA, BorderLayout.NORTH);
panelAB.add(scrollPaneB, BorderLayout.CENTER);

3.1 Зачем нужна библиотека Spring?
Главным образом, для создания трех(и более)звенных клиент-серверных приложений. Сами авторы предлагают Spring в качестве альтернативы J2EE. Это если по-простому.

3.3 Делают ли вообще сайты на JSP. Если да, то в чем их плюсы?
Делают. Насчет плюсов - смотря в сравнении с чем.

3.4 При резком изменении размеров моих окон, созданных на Jave, я замечаю что границы окна как бы двоятся, дергаются, иногда проступает черный фон на который с задержкой наезжают мои Controls. Короче, медленно прорисовывает, хотя сама программа не тормозит. У меня DualCore 3ГБ, хотя и с плохой видеокартой, но на native окнах такого нет. Это что?
Увы, оконная подсистема Java даже на мощных машинах работает не моментально; такова плата за кроссплатформенность.
 
D

Dymytry

LuMee, спасибо!

Имелось ввиду - в чем плюсы и минусы JSP по сравнению с ASP, PHP, Perl и другими технологиями для создания сайтов.

Еще вот возник вопрос - какой редактор GUI лучше использовать для Eclipse? Посмотрел их родной Visual Editor и даже не понял что скачивать с сайта.. В NetBeans это удобнее.

А почему больше не пишете на Jave, нашлась более интересная альтернатива?
 
L

LuMee

Имелось ввиду - в чем плюсы и минусы JSP по сравнению с ASP, PHP, Perl и другими технологиями для создания сайтов.
Про ASP "просто" говорить не имеет смысла: эта технология, можно сказать, отмерла. Если брать ASP.NET, то эта штука находится примерно в той же категории, что и JSP (только заточена исключительно под Windows).
Если сравнивать JSP и PHP, то обычно отмечается следующее:
- РНР, как правило, предпочтителен для небольших и среднекалиберных проектов: он прост в освоении, дешев (имеются в виду затраты на разработчиков, хостинг и т.п.), позволяет быстрее создавать приложения с несложной логикой.
- JSP, в свою очередь, будучи частью платформы J2EE, лучше себя ведет при больших нагрузках, позволяет более эффективно разрабатывать крупные сложные проекты (позволяя, опять же, задействовать другие Java-фреймворки, вроде Spring, EJB, JSF и т.п.).
Понятное дело, что такое разделение: Java - для крупных задач, РНР - для задач помельче, - довольно грубое, в реальности выбор в пользу той или иной технологии может зависеть от многих других факторов.

А почему больше не пишете на Jave, нашлась более интересная альтернатива?
Дело даже не и в интересности. Просто в тот момент, когда искал себе работу, вакансий по Java в моем городе не нашлось, а вот по .NET нашлась; им сейчас и занимаюсь. Хотя, если однажды начальство решит перебросить меня на Java-проект, то я совершенно не расстроюсь :)
 
D

Dymytry

Появились еще вопросы, посоветуйте плиз!

1) Был шокирован Java Date классом. Оказалось, что
Код:
	  Calendar calendar = Calendar.getInstance();
calendar.set(2010, 0, 27, 10, 0, 0);
Date date = calendar.getTime();
System.out.println(date.getTime());
будет при каждом запуске кода выдавать РАЗНЫЕ даты в миллисекундах. Как такое вообще может быть?
Встает вопрос: у меня две даты, одну я делаю сам через calendar.set, а вторую считываю из текста через formatter.parse. И вот, разумеется, дата из форматтера не имеет на конце этих миллисекунд, а дата которую ставлю сам - имеет. В результате равные даты - не равны! Что тут сделать можно? Как вообще правильно сравнивать даты в Jave?

2) У меня есть соединение с COM интерфейсом сторонней программы через JAWIN. Вот код:
Код:
	MyConnection()
{		
try{
Ole32.CoInitialize();
app = new DispatchPtr("MyApplication");			 
}
catch (Exception e) {
e.printStackTrace();
}  				
}

protected void finalize() throws Throwable {

try {			
Ole32.CoUninitialize();			
} catch(Exception e) {			
}		
finally {			
super.finalize();
//more code can be written here as per need of application			
}

}
Скажите:
а. правильно ли я использовал функцию finalize или лучше как-то по другому
б. я хочу при ошибке инициализации что-то сообщать своей программе - "все ок" или "не получилось". как это обычно делают? ведь конструктор ничего не возвращает...

3) я обычно делаю каждый класс в отдельном файле. это хороший тон?
 
L

LuMee

Что тут сделать можно?
Первое, что приходит в голову - убрать миллисекунды:
Код:
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(2010, 0, 27, 10, 0, 0);
Ну а потом уже можно сравнивать.

а. правильно ли я использовал функцию finalize или лучше как-то по другому
Вроде нормально. Вот , по крайней мере, такой подход и рекомендуется.

б. я хочу при ошибке инициализации что-то сообщать своей программе - "все ок" или "не получилось". как это обычно делают? ведь конструктор ничего не возвращает...
ИМХО, правильнее будет убрать try..catch из конструктора. Тогда вызывающий код по выборшенным исключениям поймет, что инициализация не удалась. Можно еще в catch-блоке выбрасывать исключение какого-то своего типа, чтобы положить в него все желаемые сведения.

3) я обычно делаю каждый класс в отдельном файле. это хороший тон?
Да, в общем случае так и следует делать.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Скажите:
а. правильно ли я использовал функцию finalize или лучше как-то по другому

правильно не использовать finalize вообще и освобождать ресурсы явно, так как время вызова finalize недетерминированно и, да и, вообще не гарантируется.
 
D

Dymytry

Kmet, то есть надо удалять объект через Object = null?
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
как бы в яве явно удалять объекты не надо. когда на объект не останется ссылок он будет удален сборщиком мусора. finalize же просто способ отловить этот момент, что-то вроде суррогата деструктора из языков без сборщика мусора. но сборщик мусора заботится только об объектах, все остальные ресурсы (файлы, сокеты, соединения с бд и т.д) необходимо освобождать явно и это не стоит делать в методе finalize (почему смотри выше)
 
D

Dymytry

Набежала еще порция вопросов, ничего что я тут спрашиваю?.. :)

1) у меня есть общая задача: генератор отчетов под веб который использует drag'n'drop interface для кастомизации отчета и далее с исп. ajax этот отчет получает. у меня информация хранится в Lotus Domino, но мне интересно узнать какими средствами решали бы эту задачу java-разработчики, если бы она хранилась где угодно (oracle например), а веб-сервер был бы другой. поэтому я спрашиваю тут. какие пути я могу предположить:
- интерфейс на каком-нибудь javascript framework и далее Lotus Agent. здесь все понятно, это моя тема.
- Google Web Toolkit + lotus agent. GWT тут вообще к месту? вроде как он призван упростить работу с ajax и веб-интерфейсами.
- есть волшебные слова типа XML, SOAP, Web Services.. я в этом не разбираюсь. Это может как-то помочь?
- одной из проблем которую мне предстоит решить является сортировка данных, поступающих из разных источников. возможно, если все данные идут как XML можно использовать какие-нибудь (?) библиотеки Java для работы с XML, которые смогут этот объединенный набор XML тэгов отсортировать по одному из полей. есть ли какое-то стандартное решение для таких задач, какое-то направление?
или же, если требуется вывести под веб таблицу из БД обычно ее сначала формируют и потом целиком выводят?

2) Java itself:
- странное поведение стандартного FileChooser диалога: после выбора там директории начинается работа моего кода по выгрузке в ту директорию файлов, но сам FileChooser закрывается где-то посреди этого процесса в произвольный момент (хотя я делал ему SetVisible=false). Может быть, у него отдельная нить и ей не хватает ресурсов для закрытия сразу же? Как мне это исправить?
- правильно ли я понял, что в стандартном наборе Java классов нет DateTimePicker? Что обычно используете вы?
- допустим у меня есть внутренний класс. как мне из него получить объект того класса, внутри которого он находится? То есть то, что обычно внутри класса вызывается через this?

3) есть ли хорошие Java библиотеки для сохранения данных в форматах Excel, Pdf? Обычно, когда мне надо было создать свой Excel файл я просто печатал Excel XML SpreadSheet или лез в Excel через OLE. Возможно, java-разработчики используют какое-то стандартное решение этой задачи и не надо уже искать как там Excel зовет какой-то цвет ячейки или как добавить автофильтр....
 
H

hosm

по п.3) [post="152182"]отсюда есть ссылки[/post], если не видели...
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
если нужно решить общую задачу генератор отчетов, то нужно и взять готовый генератор отчетов. например . Тут и генерация и в pdf, и в excel, и еще в кучу форматов. И поддержка различный источников данных и многое другое.

Google Web Toolkit + lotus agent. GWT тут вообще к месту?
к месту, упрощает, но уровень входа достаточно высок.

есть волшебные слова типа XML, SOAP, Web Services.. я в этом не разбираюсь. Это может как-то помочь?
может. все поддерживается из коробки

одной из проблем которую мне предстоит решить является сортировка данных, поступающих из разных источников. возможно, если все данные идут как XML можно использовать какие-нибудь (?) библиотеки Java для работы с XML, которые смогут этот объединенный набор XML тэгов отсортировать по одному из полей.
XML + XSLT. поддерживается из коробки.

есть ли какое-то стандартное решение для таких задач, какое-то направление?
data warehouse и тд

странное поведение стандартного FileChooser диалога: после выбора там директории начинается работа моего кода по выгрузке в ту директорию файлов, но сам FileChooser закрывается где-то посреди этого процесса в произвольный момент (хотя я делал ему SetVisible=false). Может быть, у него отдельная нить и ей не хватает ресурсов для закрытия сразу же? Как мне это исправить?
не понятно

правильно ли я понял, что в стандартном наборе Java классов нет DateTimePicker? Что обычно используете вы?
link removed
 
D

Dymytry

Спасибо.

Что за коробка?

к месту, упрощает, но уровень входа достаточно высок.
Имеется ввиду слабое управление форматом генерируемого кода?

JFileChooser:

Есть код выгрузки аттачментов из базы. Он спрашивает директорию куда это надо сделать.
Код:
						JFrame frame = new JFrame("File detach utility");
frame.setLocationRelativeTo(null);
frame.setSize(500, 500);

JFileChooser file_chooser = new JFileChooser("Select folder to store attachments:");
file_chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser_action = file_chooser.showOpenDialog(frame);

if (chooser_action == JFileChooser.APPROVE_OPTION) {			
runDetach = true;			
}
file_chooser.setVisible(false);


if (runDetach)
{									

//detach all files
}

И все хорошо, но сама форма выбора директории (file_chooser) закрывается почему-то где-то в середине выгрузки файлов, а не сразу, хотя явно задан setVisible(false). Вот я и думаю - это из-за нехватки ресурсов? Что можно сделать? Как-то остановить (wait) текущую нить что ли.. но file_chooser вроде как в той же нити.. непонятно.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
или же, если требуется вывести под веб таблицу из БД обычно ее сначала формируют и потом целиком выводят?
вот тут тоже не понял
допустим у меня есть внутренний класс. как мне из него получить объект того класса, внутри которого он находится? То есть то, что обычно внутри класса вызывается через this?
для Non-static nested classes (inner classes) так
Код:
public class Outer {
public class Inner {
Inner() {
Outer outer = Outer.this; 
}
}
}

eсть ли хорошие Java библиотеки для сохранения данных в форматах Excel, Pdf?

Excel =
pdf =

из коробки - это значит поддерживается в jse, без необходимости использовать сторонние библиотеки
 
D

Dymytry

1) Собираюсь сделать следующее: объединить XML из нескольких источников в один XML, применить к нему XSLT преобразование с целью сортировки и исключения ненужных элементов, далее можно преобразовать в HTML. Это возможно? Это разумный путь?
Если да, то какие именно библиотеки Java мне помогут в этом: я встречал следующие слова: SAX, DOM, JAXP, STAX, что-то из Apache.. Что нужно для решения моей задачи (и вообще для начала в данной области), что мейнстрим сейчас?

2)
- или же, если требуется вывести под веб таблицу из БД обычно ее сначала формируют и потом целиком выводят?
- вот тут тоже не понял
- мне интересно как обычно решается задача объединения данных из разных источников в один сортированный результат. например, есть таблицы из разных БД, или таблицы+виды Лотуса или еще что-то разнородное. обычно стремятся поместить все в одно место или можно использовать что-то типа того что я написал в п 1) ?
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
) Собираюсь сделать следующее: объединить XML из нескольких источников в один XML, применить к нему XSLT преобразование с целью сортировки и исключения ненужных элементов, далее можно преобразовать в HTML. Это возможно? Это разумный путь?
как один из вариантов - разумный. но многое зависит от данный, их количества и необходимых преобразований над ними. обработка xml достаточно требовательна к ресурсам.

Если да, то какие именно библиотеки Java мне помогут в этом: я встречал следующие слова: SAX, DOM, JAXP, STAX, что-то из Apache..
JAXP - это просто общее названией технологий относящихся к XML в сановской реализации.
SAX, DOM, STAX - различные подходы к разбору XML. В вашем случае берите DOM, так XSLT решения в конечном счете работают имено с DOM моделями.

мне интересно как обычно решается задача объединения данных из разных источников в один сортированный результат. например, есть таблицы из разных БД, или таблицы+виды Лотуса или еще что-то разнородное. обычно стремятся поместить все в одно место или можно использовать что-то типа того что я написал в п 1) ?
поразному решается, нету одного правильно решениея. зависит от данных и от операций над ними. Если у нас есть несколько источников, отдающих небольшие XML, которые нужно объеденить, применить к ним простенькие сортировки и фильтрации, то XSLT здесь весьма к месту. Но если данных много, и выборки по ним нужно делать сложные - то лучше складывать данные в БД или DataWarehouse и работать уже с ним.

Стоит еще посмотреть XQuery (XQJ), он как раз таки и позволяет выбирать/объеденять данные из разный источников. Решение очень мощное, но еще молодое.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
про inner классы и т.п.
XSLT -
ещё один подход к обработке - (в противовес DOM)
 
D

Dymytry

С прошедшими, Java People!

Набежало у меня вопросов из серии "как лучше"..

1) есть ли что-то простое по поиску внутри вектора по одной из его составляющих?
2) у меня часто встречаются одинаковые циклы с разным содержанием. можено ли как-то формализовать такую задачу? то есть написать некую функцию или что-то этакое чтобы "запомнить" мой цикл?
3) у меня классическая задача: нужно хранить где-то совокупность String, int, long, что-то еще. на данный момент я создаю класс с такими внутренними переменными, и далее пихаю объекты этого класса в Vector. но тут проблема: нужны разные векторы и их надо как-то различать. получается, надо создавать еще один класс для хранения Vector & Vector identifier.
Пример того о чем спрашиваю:

есть объект проект. в нем поля String, int, etc
набор проектов принадлежит человеку.
у каждого человека есть имя.

я для хранения такой структуры буду вынужден создать класс Человек{Имя, Vector Проекты} и Проект {String, int}
Можно ли сделать это как-то проще?
Мне в реальности объект Человек не нужен, а нужно просто разделять последовательности проектов по неким их именам. Другими словами, я хотел бы взять объект Vector и присвоить ему имя :welcome:
Есть какие стандартные решения таких задач, или я все делаю единственным возможным способом?

4) наплодил тут source файлов. в каждом - по public классу. но сама по себе эта публичность мне абсолютно не нужна, все только в пределах моего package. и вот я второй раз задумался - а правильно ли я делаю что каждый класс помещаю в отдельный файл?
5) у меня есть несколько объектов одного типа. например - несколько Threads которые делают разную работу, несколько обработчиков разных входных данных итд. тут кажется разумным применить наследование от abstract класса. с другой стороны можно создать один класс и внутри по входящему типу делать switch. а можно вместо наследования использовать внутренние классы внутри одного общего с общими полями. есть тут какие-то общие рекомендации?
6) пока не понимаю философию exceptions в java. вот есть код:

Код:
void parserFunction(String str1, String str2)
{
String[] myarray = str1.split("\\|"); 
Date mydate = myformatter.parse(str2);

//занести myarray & mydate куда-то

}

он парсит строку. понятно что если туда передать пустую строку или строку без даты - оно выдаст Exception. Вот я и думаю: как по науке мне стоит обрабатывать эти ситуации? То ли писать if-else, то ли ставить try-catch..
нужно ли вообще проверять такие вещи как null, пустые строки итд если есть try-catch? вот я поместил все что есть внутри моей функции в try-catch и сижу спокойно.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Набежало у меня вопросов из серии "как лучше"..
для работы с колекциями следует использовать Java Collections Framework. Vector, Hashtable и т.д. с некоторой натяжкой можно считать устаревшими
2) у меня часто встречаются одинаковые циклы с разным содержанием. можено ли как-то формализовать такую задачу? то есть написать некую функцию или что-то этакое чтобы "запомнить" мой цикл?
можно. почему нет?
1) есть ли что-то простое по поиску внутри вектора по одной из его составляющих?
если колекция отсортированая то можно использовать

3) у меня классическая задача: нужно хранить где-то совокупность String, int, long, что-то еще. на данный момент я создаю класс с такими внутренними переменными, и далее пихаю объекты этого класса в Vector. но тут проблема: нужны разные векторы и их надо как-то различать. получается, надо создавать еще один класс для хранения Vector & Vector identifier.
Пример того о чем спрашиваю:

есть объект проект. в нем поля String, int, etc
набор проектов принадлежит человеку.
у каждого человека есть имя.

я для хранения такой структуры буду вынужден создать класс Человек{Имя, Vector Проекты} и Проект {String, int}
Можно ли сделать это как-то проще?
Мне в реальности объект Человек не нужен, а нужно просто разделять последовательности проектов по неким их именам. Другими словами, я хотел бы взять объект Vector и присвоить ему имя smile.gif
Есть какие стандартные решения таких задач, или я все делаю единственным возможным способом?
если имя уникально, то можно использовать Map<String, List<Проект>>
4) наплодил тут source файлов. в каждом - по public классу. но сама по себе эта публичность мне абсолютно не нужна, все только в пределах моего package. и вот я второй раз задумался - а правильно ли я делаю что каждый класс помещаю в отдельный файл?
правильно, если нужно ограничить область видимости класса пакетом, то достаточно убрать public.
5) у меня есть несколько объектов одного типа. например - несколько Threads которые делают разную работу, несколько обработчиков разных входных данных итд. тут кажется разумным применить наследование от abstract класса. с другой стороны можно создать один класс и внутри по входящему типу делать switch. а можно вместо наследования использовать внутренние классы внутри одного общего с общими полями. есть тут какие-то общие рекомендации?
общие рекомендации: полиморфизм лучше чем switch/if, композиция лучше чем наследование
пока не понимаю философию exceptions в java. вот есть код:

void parserFunction(String str1, String str2)
{
String[] myarray = str1.split("\\|");
Date mydate = myformatter.parse(str2);

//занести myarray & mydate куда-то

}



он парсит строку. понятно что если туда передать пустую строку или строку без даты - оно выдаст Exception. Вот я и думаю: как по науке мне стоит обрабатывать эти ситуации?
передать исключение вызывающему коду.
нужно ли вообще проверять такие вещи как null, пустые строки итд если есть try-catch?
нужно, чем рашьше узнаешь что данные не правильны, тем лучше.
 
D

Dymytry

Kmet и товарищи, помогите в новой серии.

(1)
есть родитель class R и его дети: сlass D1,D2,D3 extends R
есть функции doSomething(D1).. doSomething(D3) для каждого типа детей.
надо: запускать функцию doSomething и в runtime определять какой тип детей в нее загружается под видом объекта r класса R. почему под таким видом? потому что все объекты-дети хранятся у меня в HashMap<key, родитель>. итак, строчка doSomething® должна работать. а она не компилируется т.к. он говорит: нет такой функции как doSomething®, есть doSomething(D1).
я знаю, что после создания объекта класс у него остается несмотря на касты, и действительно r.getClass() выдает классы детей.
я попробовал doSomething((r.getClass()).cast®) и doSomething( (Class.forName("D1")).cast®) но ошибка остается ровно той же.
приходится запуcкать через if (r instanceof D1) но это некрасиво.
как сделать красиво?
если делать некрасиво, как это автоматизировать? if (r instanceof r.getClass()) или if (r instanceof Class.forName("D1")) - не компилируются. работает только if (r instanceof D1) {doSomething( (D1) r) } где D1 явно записано руками.

(2)
есть данные, они строятся через JFreeChart. чтобы в последнем построить график надо создать местный класс данных - dataset. получается я храню данные дважды и перегоняю их из одного места в другое. это плохо. можно попытаться унаследовать мой класс с данными от dataset, но тогда смешаются у меня классы данных и классы GUI. насколько я понимаю, это тоже плохо. как быть?

(3)
не считается ли плохим тоном:
- объявлять некоторые (временные, местные) переменные в внутри кода
- использовать конструкции с большим количеством вложений типа String a = objectName1.fieldName3.functionName5(...).fieldName8;
- использовать касты. видел на одном форуме фразу типа того что теперь (в новой 6 Jave? ) всегда можно обойти без кастов.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!