Funcionou? se sim edite o topico e no inicio do nome coloque [RESOLVIDO]. Qualquer duvida e só falar.
Cara funcionou cara … Obrigado mesmo rodou direitinho…
Galera, no caso de eu usar um iterator para percorrer uma arraylist, porem usando a arquitetura MVC (no caso seria no controller), o código “padrão” de iterator mudaria?
No caso, o código “padrão” seria assim:
for (Iterator iterator = a.iterator(); iterator.hasNext();) {
suaClasse obj = (suaClasse) iterator.next();
Ou:
while (iterator.hasNext()) {
suaClasse obj = iterator.next();
Mas no caso, usando no controller, o código seria este mesmo ou sofreria alguma mudança?
MVC não tem nada a ver com a forma que você itera suas coleções.
Particularmente ao invés de fazer assim:
for (Iterator iterator = colecaoDeObjetos.iterator(); iterator.hasNext(); ) {
TipoDeDado objeto = (TipoDeDado) iterator.next();
Faço assim, pois é bem mais legível:
for (TipoDeDado objeto : colecaoDeObjetos) {
No caso, quando criei a arraylist pus como tipo de dado a classe Model, onde ficará guardado os valores que o usuario digitou na View:
ArrayList <InserirModel> Insere = new ArrayList <>();
Porém, quando vou criar um metodo no Controller, ele não aceita eu criar o iterator dessa forma que vc me disse, e que eu marquei logo acima:
public class ViewController {
InserirModel im = new InserirModel();
public void mostraDados(ArrayList a) {
for (InserirModel obj : a) {
// Digitando isso, o NetBeans ja me da um alerta dizendo pra mudar a variável "obj" para o tipo Object, mas dessa forma, perco a referência ao Model.
}
Como suceder nesse caso?
Quando crio o for each na View, ele aceita, mas no Controller, ele da esse alerta
As implementações da interface List
são genéricas desde o Java 5, então procure especificar o tipo de dado ao declará-las.
Se não especificar o tipo, o compilador entende como sendo Object
.
Troque a seguinte assinatura de método:
public void mostraDados(ArrayList a) {
Para ser assim:
public void mostraDados(List<InserirModel> a) {
Aparece uma mensagem dizendo que list não aceita parâmetros. Mas pondo “arraylist” o erro é corrigido. Dessa forma aqui deu certo:
public void mostraDados(ArrayList<InserirModel> a) {
Mas, obrigado @staroski pela ajuda!
você pode ter importado a lista errada. List
é uma interface que é implementada por ArrayList
.
So tem uma lista no meu programa. E mudando para “arraylist” deu certo.
O correto ainda seria utilizar a List
. Novamente: Você deve ter importado errado.
Mas ai no caso vc está dizendo la no import? Aquela parte la de “import java
” ?
Sim. Muitas vezes eu importei a List
do pacote errado e não consegui utilizar. Dizer “List não aceita parâmetros” é quase um indicativo que você importou errado, rs.
Usar List ao invés de uma ArrayList é apenas uma boa prática, não uma obrigação. Com uma List, independente de você receber uma List
, uma ArrayList
ou uma LinkedList
você não vai ter problemas.
Você deve ter importado java.awt.List
ao invés de java.util.List
.
É só corrigir seu import
.
Ahh certo kk vou dar uma olhada.
Ótimo conselho! Sou novo no java então é sempre bom ouvir a voz da experiência kkk
Ja conferi aqui e era isso mesmo! Obrigado pela paciência @staroski e @FearX
Se a classe que você usa, possui uma interface, então procure declarar as variáveis como sendo do tipo da interface.
Meu projeto tem 3 classes, como está em padrão MVC: View, ViewController e InserirModel. Na interface tenho as variaveis correspondentes a número da conta, titular, saldo inicial e limite. (São campos que o usuario preenche) Poderia exemplificar para eu entender melhor essa sua afirmação?
No pacote java.util
existem algumas classes e interfaces.
A classe ArrayList
implementa a interface List
.
Então no seu código, ao invés de declarar as variáveis como sendo do tipo ArrayList
(classe), declare como List
(interface).
Exemplifique por favor essa declaração das variáveis. (Estou meio boiando ainda ‘-’ kkk)
Ao invés de declarar assim:
ArrayList<TipoDeDado> minhaLista;
Declare assim:
List<TipoDeDado> minhaLista;
No caso eu fiz assim:
List Insere = new ArrayList<>();
Ou deveria ser assim:
List Insere = new List<>();