Salve a tutti, sto svolgendo un esercizio che data una classe A, mi chiede di scrivere la classe B necessaria alla compilazione di entrambi.
Ai fini dell'esercizio non è rilevante il corpo delle funzioni, a meno che non ci sia una variabile di ritorno; cioè non mi interessa sapere cosa fanno in effetti le funzioni, ma è necessario solo che le classi compilino.
Sia A:
public class A extends B<Object> {
private B<?> b;
private String msg;
public A() { //public B(){}
b = new B<Object>(null); //public B(T t){}
msg = B.<A>buildMessage(this); //public static String buildMessage(B x){return "ciao";}
}
public Set<? super Number> f(Set<Integer> set1, Set<String> set2) {
for (Integer n: b) //b dev'essere o un array di T, o un sottotipo di Iterable<T> dove T è assegnabile a Integer
if (b.check(set1, n))
return b.process(set1, set2 , n);
return b.process(set2, set1 , null);
}
}
A questo punto devo scrivere la classe B.. come sto provando a fare.
In effetti sono esercizi sui generics type, ne ho già svolti diversi, ma in questo caso il mio problema sorge per il ciclo
[code] for (Integer n: b)
[/code]
Non riesco ad implementare la classe B in maniera tale che non mi dia errore, avevo provato definendo la classe B come
public class B<T extends Iterable<Object>> implements Iterable<Object>{
ma ovviamente non va bene perchè è sbagliato, come tutte le altre intestazioni che ho provato!!
Penso che il tipo di B debba estende Iterable<qualcosa>(Ma forse sarà proprio sbagliata questa convinzione?!) ... Insomma in base alle mie conoscenze non riesco proprio a venirne a capo!
Spero in un vostro aiuto....