If clarity is more important than efficiency (and it almost always is), then I'd use cond here:
(cond
(string? a) 0
(instance? Number a) 0
:default (count a))
There's the possibility that what you really want is "the count if it's countable, otherwise 0". In that case, the 'seq' function can help
(if (seq a) (count a) 0)
And if you actually care about performance, doing it with protocols should let you buy into more JVM optimizations in principle. But profile before and after to make sure!
(defprotocol SwansonPropello
(swanson-propello [a]))
(extend-protocol SwansonPropello
clojure.lang.ISeq
(swanson-propello [a] (count a))
clojure.lang.Seqable
(swanson-propello [a] (count a))
Object
(swanson-propello [_] 0))