vittorio130881
05-01-2015, 15:33
ciao a tutti
sul libro che sto studiando per i parametri covarianti dei generics fa questo esempio
interface Animale<C extends Cibo> {
void mangia(C cibo);
}
public class Carnivoro implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } }
public class Erbivoro<E extends Erba> implements Cibo, Animale<E> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
}
}
ma non sarebbe piu chiaro e giusto scrivere cosi?
interface Animale<C extends Cibo> {
void mangia(C cibo);
}
public class Carnivoro<Erbivoro> implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } }
public class Erbivoro<Erba> implements Cibo, Animale<Erba> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
}
}
ovvero mettere Erbivoro come tipo della classe carnivoro (o implementando Animale lo eredita??)
e se tanto alla fine erba non ha sottoclassi e carnivoro mangia solo erbivoro mettere direttamente Erba e non E extends erba?
Seconda domanda se potete e volete....
List<String> nomiList = new ArrayList<String>(Arrays.asList(nomi));
dove nomi è un array di stringhe banalissimo con marco paolo e giovanni.....
mi chiedo.........ma dove dico ad Arrays di accettare solo stringhe? dove sta la dichiarazione?
ad esempio nomiList dichiaro che lavora solo con stringhe...e Arrays?
sul libro che sto studiando per i parametri covarianti dei generics fa questo esempio
interface Animale<C extends Cibo> {
void mangia(C cibo);
}
public class Carnivoro implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } }
public class Erbivoro<E extends Erba> implements Cibo, Animale<E> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
}
}
ma non sarebbe piu chiaro e giusto scrivere cosi?
interface Animale<C extends Cibo> {
void mangia(C cibo);
}
public class Carnivoro<Erbivoro> implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } }
public class Erbivoro<Erba> implements Cibo, Animale<Erba> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
}
}
ovvero mettere Erbivoro come tipo della classe carnivoro (o implementando Animale lo eredita??)
e se tanto alla fine erba non ha sottoclassi e carnivoro mangia solo erbivoro mettere direttamente Erba e non E extends erba?
Seconda domanda se potete e volete....
List<String> nomiList = new ArrayList<String>(Arrays.asList(nomi));
dove nomi è un array di stringhe banalissimo con marco paolo e giovanni.....
mi chiedo.........ma dove dico ad Arrays di accettare solo stringhe? dove sta la dichiarazione?
ad esempio nomiList dichiaro che lavora solo con stringhe...e Arrays?