Como instancio um objeto cujo um atributo é em array

10 respostas Resolvido
jsfjava
E

Tenho uma classe

public class Musica {
    private Integer codigo;
    private String autor;
    private String album;
    private String anoDeLancamento;
    private List<String> musicaDoAlbum = new ArrayList<String>();
    
    
    public Musica(Integer codigo, String autor, String album, String anoDeLancamento, List<String> musicaDoAlbum){
        this.codigo = codigo;
        this.autor = autor;
        this.album = album;
        this.anoDeLancamento = anoDeLancamento;
        this.musicaDoAlbum = musicaDoAlbum;
    }

e quero fazer algo assim:

@ManagedBean
public class ConsultarMusicaBean {
    private List<Musica> musicas = new ArrayList<Musica>();
    
    
    public void exibirMusicas(){
        
            this.getMusicas().add(new Musica(1, "bob", "songs of all", "17/07/1978", "AQUI QUERO PASSAR UM ARRAY LIST COMO FAÇO??"));        
    }
    
    public List<Musica> getMusicas(){
        return this.musicas;
    }

10 Respostas

E

Minha classe esta assim

public class Musica {
    private Integer codigo;
    private String autor;
    private String album;
    private String anoDeLancamento;
    private List<String> musicaDoAlbum = new ArrayList<String>();
N

Acredito que seja simples, crie um Objeto ArrayList, preencha-o e passe como parâmetro, ou crie o objeto com a lista de Strings no momento em que estiver passar.

public void exibirMusicas(){
         List<String> songs = new ArrayList<String>();
      songs.add("Numb");
      songs.add("In The End");
      songs.add("Encore");
      songs.add("Radioactive");
        this.getMusicas().add(new Musica(1, "bob", "songs of all", "17/07/1978", songs));        
 }

Você não vai precisar inicializar a lista na classe, se fizer da forma como quer passar a lista. Ou, pode instanciar a classe, e adicionar Strings por ela.

Musica musica = new Musica(); //Você poderia tirar a lista dos parâmetros dos construtos.
  musica.getMusicaDoAlbum.add("Hold The Door");
  musica.getMusicaDoAlbum.add("Amestris");
  musica.getMusicaDoAlbum.add("Demogorgon");
E

Entendi, mas quando eu for por exemplo criar um outro objeto do tipo musica para um novo cantor, as musicas serao as mesmas, eu queria ficar modificando, entendeu?

N

kara, faça isso num form na pagina JSF. Você vai precisar ter uma referência a objetos do tipo Musica no Managed Bean, sempre q você preencher e adicionar um Obj do tipo música na lista de músicas, você instancia um novo objeto, que será preenchido, e posteriormente adicionado a lista.

E

eu fiz o que eu queria mais como eu faria o que eu descrevi acima? desde já muito grato

H
Solucao aceita

Você também pode usar o método asList da classe Arrays no java 7+
Ex:

this.getMusicas().add(new Musica(1, "bob", "songs of all", "17/07/1978", Arrays.asList("musica 1", "Musica 2")));
P

Ola

sua modelagem é esquisita. sua classe Musica não seria, na verdade, Album ( pq musica teria uma lista de musicaDoAlbum )?

de qq forma, se for complicado criar a classe Musica ou Album ou seja la o que for, cogite criar uma Factory para criar os objetos.

salvo engano o Arrays.asList esta presente desde o Java 1.4 ( ou mesmo antes )

H

Desculpe engano meu, a classe java.util.Arrays esta presente deste o java 1.2

P

esta desculpado :slight_smile:

E

Obrigado era isso que queria fazer, estava estudando se tinha uma forma de passar parâmetros de array pelo construtor e instanciar em outrar classe e deu certo meu exercicio obrigado.

Criado 12 de setembro de 2016
Ultima resposta 12 de set. de 2016
Respostas 10
Participantes 4