Как указать тип аргумента для вызова функции, если передаваемый аргумент является литералом nil
? Я столкнулся с ситуацией, когда я пытаюсь проксировать класс Java с несколькими конструкторами с одним аргументом, например:
public class MyClass {
public MyClass(String a) {...}
public MyClass(List b) {...}
}
Я хочу вызвать конструктор, который принимает строковый аргумент для моего прокси, но передает ему нулевое значение для этого аргумента. Просто вызов:
(proxy [MyClass] [nil] ...)
выдает исключение, потому что Clojure находит несколько конструкторов и не знает, какой из них вызывать. Но пытаюсь добавить подсказку типа, например:
(proxy [MyClass] [^String nil] ...)
выдает исключение с сообщением «Метаданные могут применяться только к IMetas». Достаточно справедливо - при чтении литерала nil
читателю не к чему прикрепить метаданные. Итак, как я могу обойти это? Мне удалось найти решение с использованием let
, но оно кажется довольно неуклюжим:
(let [NIL! nil]
(proxy [MyClass] [^String NIL!] ...))
Есть лучший способ сделать это?