2012-02-21 10 views
20

consideran este código:¿Debería sobrecargar la resolución Seleccionar métodos privados?

class Foo { 
    public void doIt(String... strs) { 
     System.out.println("this is varargs"); 
    } 

    private void doIt(String str) { 
     System.out.println("this is single"); 
    } 
} 

class Bar { 
    public static void main (String[] args) { 
     new Foo().doIt(""); 
    } 
} 

Con la versión javac 1.6.0_29, falla al compilar, afirmando:

VarArgsError.java:14: doIt(java.lang.String) has private access in Foo 
    new Foo().doIt(""); 
     ^
1 error 

Sí, este es el código tonta y hay al menos dos soluciones obvias, pero Soy curioso. Basado en section 15.12.2 of the specification, este error de compilación parece un error en javac, porque el primer paso debe eliminar el doIt no varargs, ya que es inaccesible según section 6.6.1. ¿Me faltan algunos otros detalles en el algoritmo de búsqueda o es esto tan obviamente incorrecto como creo que es?

+1

Para completar, ¿cuál fue el error? –

+0

Eso fue un extraño error de copia/pasteur, gracias por atraparlo. Lo edité en. –

+1

Corrí el mismo código en JDK 1.6.0_23 y no recibí el error (sé que lo hiciste el _29, pero lo probé de todos modos) – Deco

Respuesta

Cuestiones relacionadas