2010-10-26 9 views
5

Nell'esempio seguente, ho 2 costruttori: uno che accetta una stringa e uno che accetta un oggetto personalizzato. Su questo oggetto personalizzato esiste un metodo "getId()" che restituisce una stringa.Quale costruttore viene scelto quando passa null?

public class ConstructorTest { 
private String property; 

public ConstructorTest(AnObject property) { 
    this.property = property.getId(); 
} 

public ConstructorTest(String property) { 
    this.property = property; 
} 

public String getQueryString() { 
    return "IN_FOLDER('" + property + "')"; 
} 
} 

Se passo null al costruttore, quale costruttore viene scelto e perché? Nel mio test viene scelto il costruttore String, ma non so se questo sarà sempre il caso e perché.

Spero che qualcuno possa darmi qualche informazione su questo.

Grazie in anticipo.

risposta

12

In questo modo:

ConstructorTest test = new ConstructorTest(null); 

Il compilatore si lamenta affermando:

Il costruttore ConstructorTest (anObject) è ambigua.

La JVM non può scegliere quale costruttore per invocare in quanto non fa informazione del tipo di argomento che corrisponde al costruttore (Vedi: 15.12.2.5 Choosing the Most Specific Method).

È possibile chiamare specifica costruttore dal typecasting il parametro, come:

ConstructorTest test = new ConstructorTest((String)null); 

o

ConstructorTest test = new ConstructorTest((AnObject)null); 

Aggiornamento: Grazie a @OneWorld, il relativo (aggiornata link in il tempo di scrittura) è accessibile here.

+0

Hai ragione, ho fatto un errore nel mio test, ecco perché l'errore del compilatore non si è verificato. –

+0

null, chi lo sapeva! –

+0

link is death; ( – OneWorld

0

Java utilizza il contructor più specifico che può trovare in base agli argomenti.
PS: se si aggiunge il costruttore (InputStream), il compilatore genera un errore a causa dell'ambiguità - non può sapere cosa è più specifico: String o InputStream, perché si trovano in una gerarchia di classi diverse.

+0

Assolutamente errato. Ti risparmio l'onere di svalutare questa risposta. –

+0

Perché no? Spiega per favore, se hai qualcosa da dire. – foret

+0

Vedere il mio post .... –

3

Il compilatore genera un errore.

+0

È necessario elaborare ulteriormente. –

+0

Hai ragione, ho fatto un errore nel mio test, ecco perché l'errore del compilatore non si è verificato. –

Problemi correlati