Java: resolución en tiempo de compilación y "método más específico" tal como se aplica a la variable arity

¿Podría alguien ayudarme a entender sección 15.12.2.5 del JLS re: método más específico?

(sigue el corte y el pegado de JLS) @

Además, un método de miembro de aridad variable llamado m es más específico que otro método de miembro de aridad variable del mismo nombre si:

Un método miembro tiene n parámetros y el otro tiene k parámetros, donde n> = k. Los tipos de los parámetros del método del primer miembro son T1,. . . , Tn-1, Tn [], los tipos de los parámetros del otro método son U1,. . . , Reino Unido, Reino Unido []. Si el segundo método es genérico, entonces R1 ... Rp p1, sean sus parámetros de tipo formales, sea Bl el límite declarado de Rl, 1lp, sea A1 ... Ap los argumentos de tipo reales inferidos (§15.12.2.7) para esta invocación bajo las restricciones iniciales Ti << Ui, 1ik-1, Ti << Uk, kin y let Si = Ui [R1 = A1, ..., Rp = Ap] 1ik; de lo contrario, si = Ui, 1ik. Entonces: para todo j de 1 a k-1, Tj <: Sj, y, para todo j de k a n, Tj <: Sk, y, si el segundo método es un método genérico como se describió anteriormente, entonces Al <: Bl [R1 = A1, ..., Rp = Ap], 1lp.Un método miembro tiene k parámetros y el otro tiene n parámetros, donde n> = k. Los tipos de los parámetros del primer método son U1,. . . , Uk-1, Uk [], los tipos de los parámetros del otro método son T1,. . ., Tn-1, Tn []. Si el segundo método es genérico, entonces R1 ... Rp p1, sean sus parámetros de tipo formales, sea Bl el límite declarado de Rl, 1lp, sea A1 ... Ap los argumentos de tipo reales inferidos (§15.12.2.7) para esta invocación bajo las restricciones iniciales Ui << Ti, 1ik-1, Uk << Ti, kin y let Si = Ti [R1 = A1, ..., Rp = Ap] 1in; de lo contrario, deje que Si = Ti, 1 pulg. Entonces: para todo j de 1 a k-1, Uj <: Sj, y, para todo j de k a n, Uk <: Sj, y, si el segundo método es un método genérico como se describió anteriormente, entonces Al <: Bl [R1 = A1, ..., Rp = Ap], 1lp.

Ignorando el problema de los genéricos, ¿significa esto que varargs es más importante que el subtipo, o que el subtipo es más importante que varargs, al decidir si un método es más específico que otro? No puedo resolverlo

Concrete ejemplo: ¿Cuál de las siguientescompute() métodos es "más específico" de acuerdo con el JLS?

package com.example.test.reflect;

class JLS15Test
{
    int compute(Object o1, Object o2, Object... others) { return 1; }
    int compute(String s1, Object... others)            { return 2; }

    public static void main(String[] args) 
    {
        JLS15Test y = new JLS15Test();
        System.out.println(y.compute(y,y,y));
        System.out.println(y.compute("hi",y,y));
    }
}

No puedo entender cuál es "más específico"; la salida imprime

1
2

Estoy confundido sobre cómo interpretar los resultados. Cuando el primer argumento era una Cadena, el compilador eligió el método con el subtipo más específico. Cuando el primer argumento era un Object, el compilador eligió el método con el menor número de varargs opcionales.

NOT: Si no está leyendo esta sección del JLS, y está dando una respuesta que depende de los tipos de argumentos, no me estás ayudando. Si lee atentamente el JLS, aparte de las partes relacionadas con los genéricos, la definición de "más específico"depende de los argumentos declarados, no de los argumentos reales - esto entra en juego en otras partes del JLS (no puedo encontrarlo en este momento).

p.ej. para métodos de aridad fija,compute(String s) sería más específico quecompute(Object o). Pero estoy tratando de entender la sección relevante de JLS re: métodos de aridad variable.