Java - Excluir clase abstracta de los tipos admitidos

 
Vista:
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Excluir clase abstracta de los tipos admitidos

Publicado por José Ramón (7 intervenciones) el 15/12/2020 01:57:15
Hola.

Necesitaría saber como puedo evitar crear un ArrayList del tipo Sabor pudiendo seguir creando ArrayList del tipo Dulce y Salado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package begin018;
 
import java.util.ArrayList;
import java.util.List;
 
public class Test<T extends Sabor> {
 
	public static void main(String[] args) {
		Bolsa<Dulce> a = new Bolsa<>(new ArrayList<Dulce>());
		Bolsa<Salado> b = new Bolsa<>(new ArrayList<Salado>());
		Bolsa<Sabor> c = new Bolsa<>(new ArrayList<Sabor>()); // Quiero tener la seguridad de que
                                                                       //no puedo crear un ArrayList de este tipo
 
		a.bolsa.add(new Caramelo());
		a.bolsa.add(new Regaliz());
		b.bolsa.add(new Palomita());
 
		System.out.println(a.bolsa.toString());
 
	}
 
}
 
class Bolsa<T extends Sabor> {
	List<T> bolsa;
 
	public Bolsa(List<T> sabor) {
		bolsa = sabor;
	}
}
 
abstract class Sabor {
 
}
 
abstract class Dulce extends Sabor {
 
}
 
abstract class Salado extends Sabor {
 
}
 
class Caramelo extends Dulce {
 
}
 
class Regaliz extends Dulce {
 
}
 
class Palomita extends Salado {
 
}

Me vale cualquier implementación que funcione para poder entenderlo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Excluir clase abstracta de los tipos admitidos

Publicado por Tom (1831 intervenciones) el 15/12/2020 09:16:12
No sé lo que quieres hacer pero lo normal es precisamente lo contarrio de lo que preguntas. Lo suyo es que el arraylist sea de Sabor, y no de las derivadas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Excluir clase abstracta de los tipos admitidos

Publicado por José Ramón (7 intervenciones) el 15/12/2020 13:24:59
Gracias por la respuesta.
Te explico mejor mi pregunta:

Lo que quiero poder hacer es crear Bolsa de Dulces y Bolsas de Salados. Puedo meter Caramelos en la Bolsa de Dulce pero también Regaliz. En la de Bolsa de Salado solo quiero poder meter Palomita y otras clases que hereden de Salado.

Quisiera evitar crear Bolsas donde entre Dulce y Salado, y ese ArrayList de Sabor deja que esto ocurra.

No sé si esto es posible pero supongo que haya manera para que haya control de tipos de Bolsa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Excluir clase abstracta de los tipos admitidos

Publicado por Tom (1831 intervenciones) el 15/12/2020 16:08:51
1
2
3
4
5
6
7
class BolsaDulce<T extends Dulce> {
	List<T> bolsa;
 
	public BolsaDulce(List<T> sabor) {
		bolsa = sabor;
	}
}

1
2
3
4
5
6
7
class BolsaSalado<T extends Salado> {
	List<T> bolsa;
 
	public BolsaSalado(List<T> sabor) {
		bolsa = sabor;
	}
}

Pero ... allá tú.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar