|
|
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть два класса: Main и XmlParser. Подскажите, как можно заполнить zurnal и last10 значениями из search и searchCopy соответственно при вызове метода XmlParser.xmlMethod()? Класс Main: Код: java 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. 41. 42. 43. 44. 45. 46. Класс XmlParser: Код: java 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. Единственное, до чего я додумался - это сделать метод xmlMethod возвращаемым, но проблема в том, что return вроде как может вернуть только 1 значение, а ArrayList у меня 2. Конечно, можно их запихнуть в один общий ArrayList, но хотелось бы без такого обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2018, 17:26 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
- Вариантов масса - Идея возвращать результат работы метода - здравая - Если нужно вернуть много объектов, то, обычно, их объединяют в структуру или используют грязный хак в виде Tuple - Почему нужен список списков не очень понятно, если можно просто склеить списки - К коду вообще много претензий - Как альтернатива возвращаемому результату - callback - параметром метода передаете какую-нибудь лямду Consumer<String>. Реализация лямды добавляет в TextArea - пользователи лямбды добавляют в нее строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2018, 18:22 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Blazkowicz- Вариантов масса - Идея возвращать результат работы метода - здравая - Если нужно вернуть много объектов, то, обычно, их объединяют в структуру или используют грязный хак в виде Tuple - Почему нужен список списков не очень понятно, если можно просто склеить списки - К коду вообще много претензий - Как альтернатива возвращаемому результату - callback - параметром метода передаете какую-нибудь лямду Consumer<String>. Реализация лямды добавляет в TextArea - пользователи лямбды добавляют в нее строки. Если можно, приведите, пожалуйста, пример реализации одного из этих вариантов. По поводу кода я знаю, на java пишу 7-ой день, обычно с C# работаю, там с этим гораздо проще все. Но курсач сказали писать на джаве, вот и мучаюсь) Ну и, конечно, не против выслушать претензии к коду, новая информация лишней никогда не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2018, 20:36 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Замечания по коду - Строки нельзя сравнивать через == и !=, потому что эти операторы сравнивают ссылки на объекты. Одинаковая строка можен быть представлена разными объектами. - Избегайте статики - классов, методов и т.п. по возможности. Статические методы имеют ряд ограничений. - Используйте максимально абстрактный нужный интерфейс при объявлении перменых List<String> text = new ArrayList<>(); - Изучите биндиг в JavaFX это очень полезный инструмент - Избегайте переиспользование кода копированием (копи-паста) - вот тут у вас условие влияет только на единицу, но скопировали вы целый блок, хотя условие можно было применить только к аргументу Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: java 1. - Исключения можно ловить одним блоком: https://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 08:37 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Замечания по коду - Строки нельзя сравнивать через == и !=, потому что эти операторы сравнивают ссылки на объекты. Одинаковая строка можен быть представлена разными объектами. Вчера весь вечер убил на то, чтобы понять, почему строки сравниваются неправильно. Пока не додумался загуглить на эту тему) equals будет же достаточно для сравнения? Потому как где-то видел примечание, что его надо переопределять, но вроде даже без этого сравнение идет корректно. По Вашему коду recordFound - это что? Если на его место поставить, например, search, то в last10 у меня при нажатии на кнопку появляется лишь "[]". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 10:49 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Fanat_96По Вашему коду recordFound - это что? То что вы хотите добавить в текстовое поле. Fanat_96Если на его место поставить, например, search, то в last10 у меня при нажатии на кнопку появляется лишь "[]". Это я не знаю. Такие вопросы лушче пошаговому отладчику задавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 14:09 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Blazkowicz- Используйте максимально абстрактный нужный интерфейс при объявлении перменых List<String> text = new ArrayList<>(); А вот это зачем? В сигнатурах метода понятно, но в для локальных переменных зачем? И как это соотносится с новой линией партии? Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 15:00 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Если мне нужно вернуть два ArrayList, значит можно написать примерно так? Код: java 1. И вызвать так Код: java 1. 2. Вроде как работает, но мало ли и тут накосячил) По сути, вместо Consumer<String> я могу написать Consumer<ArrayList>, так как я их возвращаю. Правда, потом надо еще будет String.valueOf() использовать. Результаты выводит идентичные. Собственно, вопрос: есть ли разница? И еще: результат (в обоих случаях), возвращается в виде строки. Я разбил его таким вот образом: Код: java 1. 2. 3. 4. В результате в searchMain записало все 15 передаваемых элементов. Но может есть более простой способ построчной записи напрямую в textarea? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 15:46 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
fixxerА вот это зачем? Смотри SOLID Low Coupling Чем более конкретный тип ты используешь, тем больше ты к нему привязан, тем больше тебе нужно делать изменений в случае изменения самого конкретного типа или его API. То есть цепная реакция от изменений имеет больший радиус. Когда же используешь более абстрактный тип, то связь с конкретным типом теряется и изменения конкретного типа уже никак не касаются остального кода и цепной реакции при внедрнении изменений не происходит. Ну, то есть она минимизирована. fixxerВ сигнатурах метода понятно, но в для локальных переменных зачем? Я не вижу разницы между полями, локальными переменными и аргументами. Все они являются переменными. И то что одна и та же переменная сегодня аргумент, завтра локальная переменная, послезавтра уже поле - вполня обычная ситуация при рефакторинге. fixxer И как это соотносится с новой линией партии? Код: java 1. Как всегда: палка о двух концах. https://www.beyondjava.net/blog/adding-type-inference-to-java-good-or-evil/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 15:56 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Fanat_96, Как я написал изначально, способов реализовать передачу значения существует много. Ваша задача выбрать наиболее простой с одной стороны. Но и наиболее понятный стороннему читателю с другой стороны. В промышленном программировании понятность и очевидность кода это очень важный критерий качества кода, который при современных вычислительных мощностях, зачастую, намного важнее, например, производительности. А иногда даже корректности. (важность меряется экономический эффективностью). Так как код живет долго и подвергается постоянным изменениям. И стоимость этих изменений является основной статьей затрат при разработке. В качестве же курсовой работы правильное решение зависит от того какая у вас цель. Сделать и забыть. Сделать и забыть, но чтобы работало. Научится делать хорошо. В этом случае, наверное, стоит прочитать такие книги как Clean Code и применять рекомендации из этих книг к своему коду. Для новичков есть один очень простой и классный совет. Чем больше ваш код похож на натуральный язык, тем он понятнее. И вот этот ваш код с натуральным языком имеет мало общего. Код: java 1. 2. 3. А выглядеть он мог бы, например так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Но мне сложно написать понятные идентификаторы, потому что вашей предметной области я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 16:18 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
И еще код мог бы быть совсем простым и понятным, если бы использовался MVVM паттерн. Который очень хорошо вписывается в JavaFX с той лишь оговоркой что в примитивных случаях вроде вашего разделением Model и ModelView можно принебречь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 16:34 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, честно говоря, даже не знал, что так писать можно) я скорее делаю что-то среднее между 2 и 3 пунктом. Хочется, чтобы оно работало, но и хочется понимать, почему я так написал, а не как-то иначе. Но и "вылизывать" код досконально тоже желания нет. Если менять под меня, то получается, что будет тип такого? Код: java 1. 2. 3. Если да, то в ответ в last10 я получаю то, что надо, а вот в zurnal - "[Ljava.lang.String;@4296565b". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 20:57 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Пока что метод таким вот сделал Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2018, 21:31 |
|
||
|
Заполнить textarea из другого класса
|
|||
|---|---|---|---|
|
#18+
Fanat_96, Код: java 1. Не одно и то же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2018, 08:18 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39638340&tid=2122081]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
176ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 516ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...