Здесь гораздо больше шрифтов, чем необходимо, и те, которые у вас есть, размещены так, что я не совсем уверен, что они приносят какую-то пользу - вы действительно должны указывать имя в let
, а не взначение.То есть (let [^Observer obs (...)] ...)
, а не (let [obs ^Observer (...)] ...)
.Во многих случаях оба из них будут работать, но первый гораздо «безопаснее».Также верно, что вам следует строго отдавать предпочтение reify
, а не proxy
здесь, как для производительности, так и потому, что proxy
не рекомендуется, когда вы можете этого избежать.
Я не знаю, какую библиотеку нейронных сетей вывы используете, так что вам может понадобится единственная подсказка типа для аргумента createStockMarketNeuralNetwork
, но остальные не служат никакой цели, кроме как вводить в заблуждение любого, кто читает ваш код - даже возможно, что чрезмерные шрифты введут в заблуждениекомпилятор для написания более медленного кода, если вы выбираете не точные подсказки.Таким образом, вместо того, чтобы размещать их произвольно по всему коду, переключитесь на подход reify
, предложенный sw1nn, а затем установите *warn-on-reflection*
в значение true и посмотрите, что, если таковое имеется, отражение является проблемой.Ниже приведена версия этого кода с reify
, и после удаления всех шрифтов, которые я знаю , ничего не изменилось:
(let [obs (reify java.util.Observer
(update [this o arg]
(println arg)))
^StockPriceNeuralNetwork network (NeuralNetworkFactory/createStockMarketNeuralNetwork ^java.util.List [obs])]
(.trainForTime network))