Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Problemi di ambiguità

  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Problemi di ambiguità

    Sul testo si parla degli errori di ambiguità senza fare esempi. C'è scritto che non conviene usare metodi con lo stesso nome però c'è anche scritto che esiste sempre un metodo per risolverli (<T, V extends String> invece di <T,V>)senza editare il nome del metodo incriminato. La domanda è questa:

    1.come si può risolvere il seguente problema di ambiguità senza editare i nomi dei metodi ambigui?

    2.ho forse capito male io e i metodi ambigui non si possono mai risolvere?

    codice:
    class Gen<T, V extends String> {
    	T ob1;
    	V ob2;
    	Gen(T o, V oo) {
    		ob1 = o;
    		ob2 = oo;
    	}
    	T getob() {
    		return ob1;
    	}
    	V getob() {
    		return ob2;
    	}
    }
    class Esempio {
    	public static void main(String args[]) {
    		Gen<Integer, String> iOb = new Gen<Integer, String>(88, "PROVA");
    		int v = iOb.getob();
    		System.out.println("Valore: " + v);
    		String m = iOb.getob();
    		System.out.println("Valore: " + m);
    	}
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    1) In quel caso non si può, se non modificando la discriminante
    2) Hai capito male solo in parte

    Due metodi si definiscono diversi quando:

    1) Hanno nome diverso
    2) Prendono un numero diverso di parametri
    3) Prendono lo stesso numero di parametri, ma di tipi diversi

    I punti 2 e 3 attuano ciò che si chiama "overload" di un metodo.

    Da questo ne si deduce che il tipo di ritorno del metodo non è una discriminante valida. Nell'esempio da te postato, il "metodo incriminato" non ha alcun parametro, ergo non hai nessuna discriminante fra i due, quindi è impossibile risolvere quell'ambiguità se non aggiungendo, ad almeno uno dei due, almeno un parametro.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Il libro in effetti scrive questo codice:

    class MyGenClass<T, V>{
    T ob1;
    V ob2;
    //...
    void set(T o) {
    ob1=o;
    }
    void set(V o) {
    ob2=o;
    }
    }

    e consiglia di scrivere MyGenClass<T, V extends String> però dice anche che quando si scrive MyGenClass<String String> x = new MwGenClass<String String>(); il problema salta fuori e quindi si sconsiglia sempre e comunque di chiamare i 2 metodi con lo stesso nome. Potresti aiutarmi a scrivere questo codice anche con main, per favore?


  4. #4
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465


    Ci avete messo troppo tempo, non mi siete stati di grande aiuto questa volta...

    Ho risolto da solo:

    codice:
    class Box<N, S extends String> {
    	String ambiguo(N w, N h, N d) {
    		N a = w;
    		N b = h;
    		N c = d;
    		System.out.println("Siamo nel metodo <Numero, Numero, Numero>");
    		String r = new String();
    		r = "(da Number a String) " + a + " " + b + " " + c;
    		return r;
    	}
    
    	String ambiguo(N w, N h, S d) {
    		N a = w;
    		N b = h;
    		S c = d;
    		System.out.println("Siamo nel metodo <Numero, Numero, Stringa>");
    		String r = new String();
    		r = "(da Number a String) " + a + " " + b + " " + c;
    		return r;
    	}
    }
    
    class Esempio {
    	public static void main(String args[]) {
    		Box<Integer, String> oggetto = new Box<Integer, String>();
    		System.out.println("Esempio: " + oggetto.ambiguo(4, 4, 5));
    		System.out.println("Esempio: " + oggetto.ambiguo(4, 4, "e"));
    		// Questo membri qui sotto causano ambiguità
    		// Box<Integer, Integer> oggetto2 = new Box<Integer, Integer>();
    		// System.out.println("Esempio: " + oggetto2.ambiguo(4, 4, 5));
    	}
    }
    Posto il codice nel caso servisse a qualche altro forumista...

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da peruzzo


    Ci avete messo troppo tempo, non mi siete stati di grande aiuto questa volta...
    Considerando che questo è un forum e non un servizio di assistenza, ognuno risponde se e quando ne ha tempo.
    Ad ogni modo, la soluzione te l'avevo già data nel mio precedente post, e la quoto:

    è impossibile risolvere quell'ambiguità se non aggiungendo, ad almeno uno dei due, almeno un parametro.
    e, infatti, magicamente il tuo metodo ambiguo ora è dotato di parametri.
    Basta leggere le risposte...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.