Com prazer posto a minha primeira dúvida aqui:
/**
* @return the kernels
*/
public ArrayList<String> getKernelsClone() {
return (ArrayList<String>) kernels.clone();
}
Acusa “Type safety: Unchecked cast from Object to ArrayList”. Ok, sei do que acontece, mas como faço para parar de dar esse warning? (Orientadamente à objetos falando.)
/**
* @return the kernels
*/
@SuppressWarnings ("unchecked")
public ArrayList<String> getKernelsClone() {
return (ArrayList<String>) kernels.clone();
}
[quote=thingol]
/**
* @return the kernels
*/
@SuppressWarnings ("unchecked")
public ArrayList<String> getKernelsClone() {
return (ArrayList<String>) kernels.clone();
}
[/quote]
Isso é uma mutreta do Java que só varre para debaixo do tapete o pó,
não tem como fazer isso orientadamente à objetos?
Se você olhar nos fontes do JDK, há essa mutreta em pelo menos um lugar - deve ter mais lugares onde tem essa coisa horrível.
- Quando se cria um ArrayList<T> a partir de um array, é necessário fazer o cast do array criado para T[], o que é meio porco mesmo.
O problema é que o método “clone” não foi “generificado” (sei lá que palavrão acabei de falar). Então ele continua retornando um Object. O grande problema é que a interface Cloneable é vazia e não tem um método “clone”, como você deve bem saber (argh). O método clone é implementado na classe java.lang.Object - argh. Se a interface Cloneable tivesse um método clone, poderíamos ter algo como:
interface Cloneable<T> {
T clone();
}
...
class Object implements Cloneable<Object> {
...
}
class SeuMaravilhosoEClonavelTO implements Cloneable<SeuMaravilhosoEClonavelTO > {
...
}
Ou seja, não tem como fazer isso sem ter de usar o quebra-galho.