axo q resposta é não… mas vamos a pergunta é possivel restriginer um parametro que esteja na linha de <T> tanto para super ? como para extends? ou seja… so poderiam entrar ou <? extends T> ou <? super T>
a duvida é pq eu só queria receber em uma parametros os valores ou que fossem do mesmo tipo, ou supertipos ou subtipos… mas nunca fora da arvore da tipologia…
por exemplo, se T fosse Number então so seriam aceitos, Objects, Numbers, Integer, Long, Double, … etc … ou seja… os supertipos o proprio tipo e os subtipos… … porem nunca uma String por exemplo que é de outra arvore de tipologia
eu so consigo ou restringir para cima… Object e Number… ou restringir para baixo… Number e seus descendentes…
Alguem sabe alguma forma de juntar tudo ?? na tipologia ? …
Seria algo com funciona o cast em tempo de compilação
Number n = null;
é possivel usar casta para cima e para baixa na tipologia porem nunca fora da hieraquia…
Object o = (Object)n;
Object o = (Number)n;
Object o = (Integer)n;
Object o = (Double)n;
tudo isso compila, porem Object o = (String)n; não compila, pois String não faz parte da hieraquia de Number
…
espero q meu post seja claro
Esse é um exemplo de comparação de tipos iguais
public class MyGeneric
{
public MyGeneric() {}
public static < T extends comparable< T > > T maximum( T given1, T given2, T given3 )
{
T max = given1;
if ( given2.compareTo( max ) > 0 )
max = given2;
if ( given3.compareTo( max ) > 0 )
max = given3;
return max;
}
public static void main( String args[] )
{
System.out.printf( "Maximum of %d, %d and %d is = %d \n\n", 2, 3, 4,
maximum( 2, 3, 4 ) );
System.out.printf( "Maximum of %.1f, %.1f and %.1f is = %.1f \n\n", 5.2, 6.2, 7.2,
maximum( 5.2, 6.2, 7.2 ) );
System.out.printf( "Maximum of %s, %s and %s is = %s \n\n", "Ah", "Eh", "Ohh",
maximum( "Ah", "Eh", "Ohh" );
}
}
vc não entendeu… eu kero uma restrição assim
public <T> T findFirst(Collaction<X> candidates, Criterion<T> criterion) {
//.... aki não importa o que tem
}
o X tem q ser algo na hieraquia do T … não pode ser nada fora da Hieraquia… por exemplo
[code]Criterion<Number> criterioNumber;
Collection<Object> lista; //<== permitido
Collection<Number> lista; //<== permitido
Collection<Integer> lista; //<== permitido
Collection<Double> lista; //<== permitido
Collection<String> lista; //<== NÃO PERMITIDO
Number n = findFirst(lista, criterioNumber);[/code]
o motivo de String não ser permitido, é pq é imposivel achar em uma lista de Strings, alguma coisa que bata com um criterio de Number, porem uma lista de Objetos pode conter um Number, o mesmo para Integer, Double …
Entenda que number é apenas um exemplo, não quer dizer q precisa ser um Number, pode ser qualquer objeto, Horse, Animal, Car … etc… so queria poder especificar que akele <X> é na hieraquia de T
veja isso:
public < T, S extends T > void test( T a, S b ) {}
ja falei q não é isso… eu precisava de algo tanto para extends como para super… fazer só extends, ou só super eu sei fazer… keria no mesmo campo aceitar os 2