-
Couldn't load subscription status.
- Fork 0
4.1 Create a generic class
Weverton edited this page Apr 3, 2017
·
9 revisions
Um exemplo básico de como utilizar generics:
public class Teste5 {
public static void main(String[] args) {
List listaAntes = new ArrayList();
listaAntes.add("A");
listaAntes.add(Integer.valueOf("2"));
for (Object object : listaAntes) {
String valor = (String) object; // Erro em tempo de execução
}
List<String> listaDepois = new ArrayList<>();
listaDepois.add("A");
listaDepois.add(Integer.valueOf("2")); // Não compila
}
}
Alguns beneficios do Generics:
- Remoção dos cast explicito;
- Maior legibilidade no código;
- Desenvolvimento de algoritmos genericos;
Exemplo de nome de parâmetro com o mesmo nome da classe:
public class Teste6 {
public static void main(String[] args) {
GenericClass<String> teste = new GenericClass<>();
teste.getT(); // Isso é uma string não MyClass
}
}
class MyClass {}
/* Mesmo o nome sendo igual a classe ele e utilizado omo parametro*/
class GenericClass<MyClass> {
private MyClass t;
public MyClass getT() {
return t;
}
}
Exemplo de herança com parametros:
public class Teste7 {
public static void main(String[] args) {
GenericBookParcel<String, Integer> valor = new GenericBookParcel<>();
}
}
/*
Dessa maneira a classe não compila devido o parametro T não esta sendo enviado para a classe pai
class Parcel<T> {}
class GenericBookParcel<X> extends Parcel<T> {}
*/
/*
* Dessa maneira funciona
*/
class Parcel<T> {}
class GenericBookParcel<X, T> extends Parcel<T> {}
Uma classe não generica herdando de uma classe generica:
public class Teste8 {
public static void main(String[] args) {
NoGenericClass valor = new NoGenericClass();
System.out.println(valor);
}
}
/*
* Classe generica
*/
class GenericClass<T> {}
/*
* Classe nao generica herdando de uma classe generica e passando o tipo desejado
*/
class NoGenericClass extends GenericClass<String> {}
Construtor generico:
public class Teste9 {
public static void main(String[] args) {
Phone<Double> teste = new Phone<>("Teste");
System.out.println(teste);
}
}
class Phone<X> {
<T> Phone(T t) {
System.out.println(t);
}
}