Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
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.
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 REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
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...
Space Pioneer starebbe realizzando un pr...
SpaceX ritirerà ''a breve'' il Fa...
La Luna ha un nuovo cratere di grandi di...
ROG Cronox: ASUS alza l'asticella dei ca...
Lenovo annuncia nuovi sistemi per la vir...
M6 e M5 Ultra, i primi benchmark conferm...
La nuova falla della cybersecurity &egra...
The Blood of Dawnwalker, il sequel potre...
Colpiti i data center Amazon: irrecupera...
Google Wallet, nuova interfaccia in arri...
iPhone Duo, problemi di produzione per i...
Firefox diventa più veloce con PDF e JPE...
WhatsApp, arriva su iOS la nuova scorcia...
Snap presenta Specs: realtà aumentata, c...
SteamOS verso un cambiamento epocale: ar...
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: 20:43.


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