Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
HONOR Magic V6 è arrivato in Italia a 2.299,90 euro con una promessa precisa: unire 4 mm di spessore da aperto (8,75 mm chiuso nel modello White, 9 mm negli altri colori) a una batteria da 6.660 mAh, la più capiente mai vista su un pieghevole. Lo abbiamo usato per oltre una settimana in versione Red 16/512 GB per capire se lo Snapdragon 8 Elite Gen 5 tiene testa alla concorrenza anche fuori dai benchmark ufficiali
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
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


Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
In Cina il mega-impianto solare a sali f...
Xiaomi Air Fryer Essential 6L: ha tutto ...
Apple riduce la produzione di iPhone 17:...
Lancio del razzo spaziale cinese Lunga M...
SpaceX Starship: Super Heavy Booster 20 ...
Questa RTX 3070 è tornata in vita...
Un ricercatore scopre uno script bash na...
Robot umanoidi teleoperati eseguono le p...
QuadRF, il gadget da 499 dollari che leg...
ChatGPT, Claude e Gemini nel mirino: cos...
Pneumatici dalla Cina, l'UE introduce da...
SpaceX vuole 100.000 satelliti in orbita...
Disney+ gratis, ma con pubblicità: l'ult...
Microsoft ammette: emissioni di CO2 su d...
Apple denuncia OpenAI e due ex dirigenti...
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: 07:37.


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