Problema básico

Olha só… Fiz um método de ordenação aqui mas pra arrays de inteiros, queria transforma ele pra genéricos. Alguém da uma ajuda? Fiz um código aqui mas da erro falando que T não pode ser static.

[code]package ed20062.g4.ordenacao;

public class MergeSort {

private static void merge (T v[], int i, int m, int j) {
T temp[] = new T[m-i+1];
int k;
for (k = i; k <= m; k++) 
	temp[k-i] = v[k];
int esq = 0, dir = m + 1;
k = m-i+1;
while (esq < k && dir <= j) {
  if (temp[esq] <= v[dir]) 
	  v[i++] = temp[esq++];
  else
	  v[i++] = v[dir++];
}   
while (esq < k) 
	v[i++] = temp[esq++];

}

public static void mergeSort (T v[], int i, int j) {
if (i < j) {
  int m = (i + j)/2;
  mergeSort (v, i, m);
  mergeSort (v, m + 1, j);
  merge (v, i, m, j);
}

}
public static void main (String[] args) {
T v[] = new T[10];
v[0] = 5; v[1] = 12;
v[2] = 4; v[3] = 1;
v[4] = 9; v[5] = 22;
v[6] = 3; v[7] = 11;
v[8] = 17; v[9] = 33;
MergeSort.mergeSort (v, 0, 9);
for (int i = 0; i < 10; i++)
System.out.println (“v[” + i +"]: " + v[i]);
}
}
[/code]

Sim, porque T é um tipo generico para uma instancia da classe, e no caso vc esta tentando usar em um bloco estatico.
Ai para usar vc faria algo como:

MergeSort<String> m1 = new MergeSort<String>()

Cria um ordenador para string

MergeSort<Integer> m2 = new MergeSort<Integer>()

Cria um ordenador para integer

etc…

Usar generics em blocos estaticos tb é util, mas vc declara o tipo generico junto com o método estatico e serve para determinar parametros ou tipos de retorno etc… por exemplo:

public class Teste {
	public static void main(String[] args) {
		Integer i = get(Integer.class, 1);
		String s = get(String.class, "teste");
		Teste t = get(Teste.class, new Teste());
	}

	public static <T> T get(Class<T> t, T impl) {
		System.out.println(t);
		return impl;
	}
}