Для Scala вы можете использовать библиотеку, которую я создал: https://github.com/kypeli/sversion
Version("1.2") > Version("1.1") // true
Version("1.2.1") > Version("1.1.2") // true
Version("1.1.1") == Version("1.1.1") // true
Version("1.1.1") > Version("1.1") // true
Version("1.1.0") == Version("1.1") // true
Version("1.1-RC2") > Version("1.1-RC1") // true
Version("1.1-RC1") > Version("1.1") // true
Чем отличаются эти два пути?
blockquote>На самом деле они не достигают одного и того же по-разному.
Первый - более «традиционный» подход, а второй - более «современный» или сокращенный, который использует приветствуемое введение анонимных классов в язык.
]И есть ли более предпочтительный выбор?
blockquote>Это вопрос мнения, для моих денег предпочтение отдается второму, потому что оно не создает в противном случае ненужного соответствия
Runnable
для класса, он также делегирует ответственность за настройку пользовательского интерфейса (правильно) на вызывающей стороне и мешает коду делать предположения (т. Е. Вы можете просто сконструировать фрейм в любое время и запустить его ... просто сделайте это из в контексте темы диспетчеризации событий).Также, в качестве предпочтения, вы не должны расширяться напрямую из
JFrame
, так как вы фактически не добавляете новую функциональность в класс, вместо этого, как это делается во втором примере, просто создайте экземпляр, когда вам нужно и создайте свой UI поверх негоВы также можете взглянуть на Concurrency in Swing для более подробной информации о том, почему вы должны использовать
]EventQueue.invokeLater
для запуска вашего UI