Múltiplos objetos em java

8 respostas
gaujava2

Estou implementando este exemplo

http://datakrup.com/2010/01/27/creating-multiple-object/

Por enquanto está assim, e está dando os erros abaixo.

Alguma ideia? obrigado

//Human.java
package multiplosobjetos;

public class Human {
	private String name;
	
	public Human(){
		name="";
	}
	
	public Human(String name)
	{
		
	}
	
	public String getName()
	{
		return this.name;
	}
	
	public void setName(String name)
	{
		this.name=name;
	}
}
//Woman.java
package multiplosobjetos;

import java.awt.List;
import java.util.ArrayList;

public class Woman extends Human {
	public void TestaHumanos() {
		List<Woman> women = new ArrayList<Woman>();
		List<Man> men = new ArrayList<Man>();
		
		
		for(int i = 0; i < 100; i++)
		{
			womans.add(new Woman());
			men.add(new Man());
		}
	}
}
//Man.java
package multiplosobjetos;

public class Man extends Human {

}
//Erros

Description	Resource	Path	Location	Type
The type List is not generic; it cannot be parameterized with arguments <Man>	Woman.java	/LabJavaSE16/src/multiplosobjetos	line 10	Java Problem
The type List is not generic; it cannot be parameterized with arguments <Woman>	Woman.java	/LabJavaSE16/src/multiplosobjetos	line 9	Java Problem
womans cannot be resolved	Woman.java	/LabJavaSE16/src/multiplosobjetos	line 15	Java Problem

8 Respostas

drsmachado
import java.awt.List;

você não deve utilizar esta lista, mas esta

import java.util.List;
F

Outra coisa, isso aqui roda?

//...
            womans.add(new Woman());  //Aqui é women, senão nem compila.
//...
drsmachado

fasts:
Outra coisa, isso aqui roda?

//... womans.add(new Woman()); //Aqui é women, senão nem compila. //...


Se a a lista womans for do tipo java.util.List, sim.
A questão é que, ao criar um novo objeto Woman, você terá todos os atributos de woman nulos…

F

Eu sei, mas ali no código “womans” não está declarado. Não vai nem compilar.
Ele declarou como “women” e “men”. Não existe “womans” no código.

drsmachado

fasts:
Eu sei, mas ali no código “womans” não está declarado. Não vai nem compilar.
Ele declarou como “women” e “men”. Não existe “womans” no código.

Nem me liguei nisso

gaujava2

Obrigado!
É verdade, estava com problema no import, que agora foi mudado para

import java.util.List;

Mas ao continuar o exemplo, está dando novos erros que não consegui resolver. Alguém?

//Woman.java
package multiplosobjetos;

public class Woman extends Human {
	
//Woman.java
package multiplosobjetos;

public class Woman extends Human {
	
}
package multiplosobjetos;

import java.util.ArrayList;
import java.util.List;


public class TestaHumanos {
	public static void main(String argsv[]) {
		List<Woman> women = new ArrayList<Woman>();
		List<Man> men = new ArrayList<Man>();
		
		
		for(int i = 0; i < 100; i++)
		{
			women.add(new Woman());
			men.add(new Man());
		}
	}

	public static List<Human> getInstances(Class<? extends Human> clazz, int counter)
	{
		List humans = new ArrayList<Human>();
		
		for(int i=0;i< counter; i++)
		{
			
			humans.add(clazz.newInstance());
		
		}
		
		return humans;
	}
}
//Man.java
package multiplosobjetos;

public class Man extends Human {

}
//erros

Description	Resource	Path	Location	Type
Unhandled exception type IllegalAccessException	TestaHumanos.java	/LabJavaSE16/src/multiplosobjetos	line 27	Java Problem
Unhandled exception type InstantiationException	TestaHumanos.java	/LabJavaSE16/src/multiplosobjetos	line 27	Java Problem
List is a raw type. References to generic type List<E> should be parameterized	TestaHumanos.java	/LabJavaSE16/src/multiplosobjetos	line 22	Java Problem
Type safety: The expression of type List needs unchecked conversion to conform to List<Human>	TestaHumanos.java	/LabJavaSE16/src/multiplosobjetos	line 31	Java Problem
Type safety: The method add(Object) belongs to the raw type List. References to generic type List<E> should be parameterized	TestaHumanos.java	/LabJavaSE16/src/multiplosobjetos	line 27	Java Problem
drsmachado

Você criou um List sem definir o tipo de objeto que essa list irá carregar. Por outro lado, inferiu isso ao ArrayList

List humans = new ArrayList<Human>();
gaujava2

Obrigado novamente. Agora deu um erro de execução. Seguem classes atualizadas e erro.

//Human.java
package multiplosobjetos;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

public class Human {
	private String name;
	private int idHumano;
	
	public Human(){
		name="";
	}
	
	public Human(String name)
	{
		this.name = name;
		idHumano = 0;
	}
	
	public Human(Integer idHumano)
	{
		name="";
		this.idHumano = idHumano;
	}
	
	public String getName()
	{
		return this.name;
	}
	
	public void setName(String name)
	{
		this.name=name;
	}

	public int getidHumano() {
		return idHumano;
	}

	public void setContador(int idHumano) {
		this.idHumano = idHumano;
	}
	
	public static List<Human> gerarHumanos(Class<? extends Human> clazz, int counter)
	{
		List<Human> humans = new ArrayList<Human>();
		int i=0;

		//Usando construtor padrao
		for(i=0;i< counter && i < 1; i++)
		{
			
			try {
				humans.add(clazz.newInstance());
			} catch (InstantiationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
		}
		
		//Usando construtor que inicia idHumano
		for(;i< counter; i++)
		{
				try {
					humans.add(clazz.getDeclaredConstructor(Integer.class).newInstance(i));
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SecurityException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InstantiationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (NoSuchMethodException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		
		}
		
		return humans;
	}

}
//Man.java
package multiplosobjetos;

public class Man extends Human {

}
package multiplosobjetos;

import java.util.ArrayList;
import java.util.List;


public class TestaHumanos {
	public static void main(String argsv[]) {
		
		//Modo antigo
//		List<Woman> women = new ArrayList<Woman>();
//		List<Man> men = new ArrayList<Man>();
//		
//		
//		for(int i = 0; i < 100; i++)
//		{
//			women.add(new Woman());
//			men.add(new Man());
//		}

		//Modo usando gerador de Humanos
		List<Human> man = Human.gerarHumanos(Man.class,10);
		List<Human> woman = Human.gerarHumanos(Woman.class,10);

	}


}
//Woman.java
package multiplosobjetos;

public class Woman extends Human {
	
}
Erro em tempo de execução

java.lang.NoSuchMethodException: multiplosobjetos.Man.<init>(java.lang.Integer)
	at java.lang.Class.getConstructor0(Unknown Source)
	at java.lang.Class.getDeclaredConstructor(Unknown Source)
	at multiplosobjetos.Human.gerarHumanos(Human.java:71)
	at multiplosobjetos.TestaHumanos.main(TestaHumanos.java:21)
Criado 16 de dezembro de 2011
Ultima resposta 26 de dez. de 2011
Respostas 8
Participantes 3