Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-12-2012, 16:35   #1
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
[JAVA] Le interfaccie si perdono nei Vector

esercizio semplice semplice...


una semplice classe che implementa una interfaccia
Codice:
public class PallinoNome implements PincoPallino {
	private String pallino;

	public PallinoNome() {
		this.setPallino("pallino");
	}

	@Override
	public String getPallino() {
		return this.pallino;
	}

	@Override
	public void setPallino(String pallino) {
		this.pallino = pallino;
	}

}
la semplice interfaccia
Codice:
public interface PincoPallino {
	public String getPallino();

	public void setPallino(String pallino);
}

e il main che "dovrebbe" funzionare
Codice:
import java.util.Vector;

public class StarterClass {

	public static void main(String[] args) {
		Vector<PallinoNome> pinchipallini = new Vector<PallinoNome>();
		aggiungiPallino(pinchipallini);
	}

	private static void aggiungiPallino(Vector<PincoPallino> pinchipallini) {
		// TODO Auto-generated method stub
	}
}
mi dà errore nella firma di aggiungiPallino, mi dice
Codice:
The method aggiungiPallino(Vector<PincoPallino>) in the type StarterClass is not applicable for the arguments (Vector<PallinoNome>)	StarterClass.java	/testCase/src/proveStrane	line 12	Java Problem
chi mi spiega il perchè si perde la generalizzazione dell'interfaccia? come potrei risolvere?
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2012, 16:52   #2
msangi
Member
 
Iscritto dal: Sep 2011
Città: Londra
Messaggi: 167
Il problema è dovuto al fatto che il metodo si aspetta un oggetto di tipo
Codice:
Vector<PincoPallino>
mentre tu gli passi un oggetto di tipo
Codice:
Vector<PallinoNome>
.

È vero che tra PincoPallino e PallinoNome c'è un rapporto di ereditarietà, ma questo non vale per i vettori che le utilizzano.
Quote:
Generics were introduced in Java 5.0 to allow type-safe generic programming.
Unlike arrays, generic classes are neither covariant nor contravariant. For example, neither List<String> nor List<Object> is a subtype of the other.
http://en.wikipedia.org/wiki/Covaria..._science)#Java
__________________
Twitter - Blog
msangi è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2012, 16:55   #3
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Ok, il problema l'avevo capito che era quello, solo che volevo una spiegazione più terra terra.

con le liste quindi dovrebbe funzionare?
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2012, 16:59   #4
msangi
Member
 
Iscritto dal: Sep 2011
Città: Londra
Messaggi: 167
No, anche con le liste avresti lo stesso problema.

Prova a dichiarare aggiungiPallino in questo modo
Codice:
aggiungiPallino(Vector<? extends PincoPallino> pinchipallini)
In pratica usi una generic wildcard in cui dici che il metodo deve accettare come parametro un vettore di qualcosa che estende PincoPallino.
__________________
Twitter - Blog
msangi è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2012, 16:59   #5
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
con questa implementazione è possibile bypassare il problema...
Codice:
import java.util.Vector;

public class StarterClass {

	public static void main(String[] args) {
		Vector<PallinoNome> pinchipallini = new Vector<PallinoNome>();
		aggiungiPallino(pinchipallini);
	}

	private static <E extends PincoPallino> void aggiungiPallino(
			Vector<E> pinchipallini) {

	}

}
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2012, 17:05   #6
msangi
Member
 
Iscritto dal: Sep 2011
Città: Londra
Messaggi: 167
È un altro modo per scrivere la soluzione che avevo postato io.
__________________
Twitter - Blog
msangi è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2012, 17:09   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da franksisca Guarda i messaggi
con questa implementazione è possibile bypassare il problema...
A dire il vero non è che sia un "problema"... è proprio una conseguenza del modo in cui sono implementati i Generics in Java (type erasure).

Una risorsa esaustiva -> link
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2012, 17:11   #8
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da msangi Guarda i messaggi
È un altro modo per scrivere la soluzione che avevo postato io.
si, l'abbiamo praticamente postata insieme, grazie mille
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
A dire il vero non è che sia un "problema"... è proprio una conseguenza del modo in cui sono implementati i Generics in Java (type erasure).

Una risorsa esaustiva -> link
thanks a lot
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La prima missione orbitale del razzo spa...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v