PDA

View Full Version : [JAVA] Generics... come fare?


lovaz
10-07-2008, 11:41
Salve a tutti.

Vorrei fare una classetta così:

...
private Callable<?> c;

public <V> Costruttore(Callable<V> c)
{
this.c = c;
}

public <V> V get()
throws Exception
{
return c.call();
}


Ma ovviamente non funziona...

In pratica vorrei riusare il parametro V del Callable in un altro metodo,
in modo da mantenere la "genericità".

Qualche idea (se si può fare)?

Grazie

^TiGeRShArK^
10-07-2008, 11:43
non ho capito... :fagiano:
ti da problemi il return del get?
in quel caso credo basti fare un cast a V o no?
oppure non ho capito una mazza di quello che hai chiesto... :stordita:

lovaz
10-07-2008, 11:47
Anche con il cast mi dà un warning di type safety...
Il problema è quel '?' nel campo c, ci vorrei mettere 'V'
("V cannot be resolved to a type")

^TiGeRShArK^
10-07-2008, 12:02
se ho capito bene dovresti fare qualcosa di equivalente:

import java.util.List;


public class Prova<V> {
private List<V> c;

public Prova(List<V> c)
{
this.c = c;
}

public V get()
throws Exception
{
return c.get(0);
}

}

che a me compila senza errori o warning...

lovaz
10-07-2008, 12:07
Sì, ma non voglio che la mia classe sia generica,
ma che prenda il tipo V dal parametro del costruttore,
ma mi sto rendendo conto che tale parametro si può
usare solo all'interno dello stesso metodo...

^TiGeRShArK^
10-07-2008, 12:12
Sì, ma non voglio che la mia classe sia generica,
ma che prenda il tipo V dal parametro del costruttore,
ma mi sto rendendo conto che tale parametro si può
usare solo all'interno dello stesso metodo...

e allora mi sa che l'unica soluzione è usare il cast che ti ho detto prima..
tanto se sai già che l'oggetto che ricevi è un Callable<V>, allora puoi tranquillamente castare (V)c.call() che tanto il controllo è già stato effettuato in precedenza e il warning lo puoi tranquillamente ignorare :p
Altre soluzioni non me ne vengono in mente se non vuoi rendere la classe generica.. :boh:

lovaz
10-07-2008, 12:19
Grazie lo stesso...

Ma a questo punto ritorno Object, così mi scompare il warning.