Metodos genericos...POR FAVOR AJUDEMMMMMM

Alguem poderia me ensinar com exemplos a sintaxe de metodos genericos…

tipo:


public static <E extends Number> void testar(List<Integer>){}

eu gostaria de saber o que significar o <E extends Number> no me metodo se alguem puder me exclarecer essa duvida com exemplos …

qualquer classe que passar no teste É-UM é valido por exemplo: Você pode passar ali: Integer, Double, porém não pode passar um Object, String ja que essas classes não passa no teste É-UM para a class Number.
E nesse caso quando você usa é que você vai usar o tipo genericos dentro no método, normalmente é quando você nao declara na class.

import java.util.*;
class MetGen{
	public<T>  void make(T t){
		List<T> li = new ArrayList<T>();
			li.add(t);
		System.out.println(li);
	}



	public static void main(String agrs[]){
		List<Integer> la = new ArrayList();
		la.add(10);
		MetGen g = new MetGen();
			g.make(la);
}}

flw… qualquer duvida so gritar :smiley:

Uma coisa que fiz aqui no trabalho e pode ser um exemplo legal tambem. Eu tinha um Map “não generico” e precisava retornar um objeto daquele map. Para facilitar o meu lado e evitar erros de cast, decidi passar o tipo do objeto esperado no metodo tambem para que ele me retornasse o objeto convertido. O resultado ficou mais ou menos assim:

public <T> T get(Class<T> clazz, String key) { Object o = map.get(key); if (o instanceof T) return (T) o; return null; }

Ow LPJava eu fiz assim aqui em casa no eclipse e ele não de pau nenhum cara ou eu não to entendendo ou não sei mais nada tipo olah só …

[code]public void testar3(List array){

}[/code]

A minha duvida é a seguinte por que ali no argumente de List<String> o compilador permitiu que eu colocasse um tipo parametrizado String, sendo que String não passa no teste É UM de Number…

alguem poderia me ajudar aqui…

O teste É UM de Number é para o tipo do objeto.

O objeto deve ser uma classe que seja sub-class de Number. Exemplo de uma sub-class de Number é Integer.

Esse codigo nao deu erro porque voce nao referenciou o E no argumento.

public <E extends Number> void testar3(List<String> array){...}

Tenta fazer assim.

public <E extends Number> void testar3(List<E> array){...}

E passa uma String novamente, verá que vai da um erro de compilação

cara seu argumento do metodo no minimo nao tem nada ver com genericos… se vc definir que seu argumento é String e nao tem nada ver com o tipo generico que vc passou antes do void… o que acontece com generico?
aonde tem a variavel (T ou E, ou outra qualquer) ele vai substituir com o tipo… o exemplo afsrj reflete nisso que falei :smiley: