Saudaçoes Galera,
Gostaria de saber qual seria a forma mais elegante de se resolver o seguinte problema.
public interface MyInterface
{
Object getSomeThing();
}
public class MyClass implements MyInterface
{
public Object getSomeThing()
{
return new Object();
}
/* Codigo Especifico */
}
public class MyClass2 implements MyInterface
{
public Object getSomeThing()
{
return new Object();
}
/* Codigo Especifico */
}
public class MyMainClass
{
public static void main (String… strings)
{
ArrayList = getList();
…
}
public static List getList()
{
return new ArrayList();
}
}
O Generics não leva em consideração o fato de MyClass implementar MyInterface.
Este exemplo é só para ilustrar rapidamente o problema.
Grato pela atenção de todos e me desculpem caso eu esteja falando besteiras.
[]'s
[code]public interface MyInterface
{
E getSomething();
}
public class MyClass implements MyInterface
{
public Integer getSomeThing()
{
return 3;
}
/* Codigo Especifico */
}
public class MyClass2 implements MyInterface
{
public String getSomeThing()
{
return “new Object()”;
}
/* Codigo Especifico */
}
public class MyMainClass
{
public static void main (String… strings)
{
ArrayList = getList();
//…
}
public static List getList()
{
return new ArrayList();
}
} [/code]
Eu não compreendi qual sua dúvida ainda?
outro problema ocorre quando quero passar um ArrayList para um metodo que espera um ArrayList.
public void useList(ArrayList x)
{
…
}
public void foo()
{
…
ArrayList arrayList = new ArrayList();
/* Da Zica aqui ! */
useList(arrayList);
…
}
[]'s
Owwwww…
dreampeppers99, vc matou minha duvida com um headshot…
=))
muito obrigado.
[quote=estevan.diedrich]outro problema ocorre quando quero passar um ArrayList para um metodo que espera um ArrayList.
public void useList(ArrayList<MyInterface> x)
{
...
}
public void foo()
{
...
ArrayList<MyClass> arrayList = new ArrayList<MyClass>();
/* Da Zica aqui ! */
useList(arrayList);
...
}
[]'s[/quote]
Um método que espera List só aceitará que passe list não aceita filhos.
Para aceitar filhos vc precisa declarar isso assim : List<? extends MyInterface> que se lê “Lista de qualquer coisa que herde de MyInterface”
Por padrão todos os métodos que recebem objetos tipados (como list) devem ser declarados com “? extends” para permitir que polimorfismo seja utilizado.
Obrigado pela dica sergiotaborda,
Funcionou perfeitamente.
[]'s
Estevan, outra dica. Quando for postar códigos, siga as recomendações do tópico abaixo:
http://www.guj.com.br/posts/list/50115.java
Isso vai deixar o código colorido e formatado, como o dos colegas.
Caso contrário, fica beeem difícil de ler. 
[quote=ViniGodoy]Estevan, outra dica. Quando for postar códigos, siga as recomendações do tópico abaixo:
http://www.guj.com.br/posts/list/50115.java
Isso vai deixar o código colorido e formatado, como o dos colegas.
Caso contrário, fica beeem difícil de ler. ;)[/quote]
Obrigado pela dica =)
[]'s