Yes. A type T is always more specific than Union{T, X} for some other type X, so a method defined with ::T as its argument will be more specific than one with ::Union{T, X} (assuming no change in the other arguments).
A few examples:
-
foo(::T)is more specific thanfoo(::Union{T, X}) -
foo(::T, ::X)is more specific thanfoo(::Union{T, X}, ::X) -
foo(::T, ::X)is more specific thanfoo(::T, ::Union{T, X}) -
foo(::T, ::X)is more specific thanfoo(::Union{T, X}, ::Union{T, X})
But there are ambiguous cases:
-
foo(::Union{T, X}, ::X)is ambiguous with (neither more nor less specific than)foo(::T, ::Union{T, X})
If there is no unique most-specific method, then Julia will throw an ambiguity error, so there’s no need to worry about one method being arbitrarily preferred.