Alguém sabe como declarar um atributo do tipo Map<Class, Collection > ?
A ideia é vincular a classe com o conteudo do collection mas sem que a classe onde o atributo eiste seja generica.Mas o compilador acusa um “T not defined”
Tem como fazer isto ?
Alguém sabe como declarar um atributo do tipo Map<Class, Collection > ?
A ideia é vincular a classe com o conteudo do collection mas sem que a classe onde o atributo eiste seja generica.Mas o compilador acusa um “T not defined”
Tem como fazer isto ?
Olá Sergio,
Não sei se entendi direito, mas basta fazerr assim que o compilador passa.
Map<Class<?>, Collection<?>>
Não sei se ajudei!
Abraço
ou esse T precisa ser explicitamente uma classe, ou voce precisa ter declarado o T como tipo parametrizado da sua classe, dona desse atributo:
class AlgumaClasse<T> {
private Map<Class<T>, Collection<T>> map;
}
O problema é exatamente esse: não quero que a classe seja parameterizada. Isso não faz sentido.
Eu só quero manter uma coerência entre os atributos do mapa. O ? funciona mas não mantém a coerencia (é o mesmo que colocar Object).
Acho que não tem solução da forma que eu queria. Têm que usar ? e cast.
Assim
public <T> Map<Class<T>, Collection<T>> getMap(){
//...
}
Assim
public <T> Map<Class<T>, Collection<T>> getMap(){ //... }
Como eu disse… o objetivo é definir um atributo desse tipo. Ou seja, uma variável interna da classe.
Por exemplo, pelo seu exemplo vc gostaria de mapear uma classe a uma collection que possui objetos desta mesma classe, é isso?
Em um Map<K,V> vc tem método get que recebe um object, e um put que é parametrizado, ai vc teria algo mais restritivo, imagino eu, pois o K e o V tem uma relação intrinseca. Não vejo no mecanismo de generics vc conseguir criar esse vinculo sem fixar o parâmetro T.
Por exemplo, pelo seu exemplo vc gostaria de mapear uma classe a uma collection que possui objetos desta mesma classe, é isso?Em um Map<K,V> vc tem método get que recebe um object, e um put que é parametrizado, ai vc teria algo mais restritivo, imagino eu, pois o K e o V tem uma relação intrinseca. Não vejo no mecanismo de generics vc conseguir criar esse vinculo sem fixar o parâmetro T.
É. Realmente a solução é usar um mapa mais generico e um método que force a relação.
Vc não poderia criar o seu próprio Map com esta restrição?
Humm… não tinha pensado nisso. É que eu não queria criar uma classe só por isso (isso cai no negocio de criar uma classe generalizada), mas é uma boa ideia. Acho que com isso resolve da forma mais fortemente tipada.
Eu tenho uma classe java que tem um atributo:
-> private Collection grupos;
Eu quero mapear ele em uma classe .as como declararia uma variável para que eu possa usar ele no flex?
Obrigado