Objetos são criados com a palavra new. Dessa forma, você só está pegando a definição da classe (o tipo dela).
Para acessar o método estático use Repetition.meuMetodoStatic();
nel
Posso estar falando uma bobagem mas neste caso você tem uma referência a classe de forma que mesmo os métodos estáticos somente por reflection, você poderia fazer isso.
Agora lhe pergunto, porque raios quer fazer isto?
Abraços.
D
Dota
luiz.portnoy:
Objetos são criados com a palavra new. Dessa forma, você só está pegando a definição da classe (o tipo dela).
Para acessar o método estático use Repetition.meuMetodoStatic();
Sim eu entendo que pra acessar métodos staticos pode ser dessa forma Repetition.static();
Não entendi o que vc quer dizer com “definiçao da classe (o tipo dela)”.
D
Dota
nel:
Posso estar falando uma bobagem mas neste caso você tem uma referência a classe de forma que mesmo os métodos estáticos somente por reflection, você poderia fazer isso.
Agora lhe pergunto, porque raios quer fazer isto?
Abraços.
So pra entender direito o getClass() ou AlgumaClasse.class.
Eu sei que ao syncronizar com “.class” eu consigo bloquear meus métodos staticos para acesso simultaneos de threads.
luiz.portnoy
Dota:
luiz.portnoy:
Objetos são criados com a palavra new. Dessa forma, você só está pegando a definição da classe (o tipo dela).
Para acessar o método estático use Repetition.meuMetodoStatic();
Sim eu entendo que pra acessar métodos staticos pode ser dessa forma Repetition.static();
Não entendi o que vc quer dizer com “definiçao da classe (o tipo dela)”.
Por exemplo:
Stringteste=newString();
A definição da classe é String. O nome da váriavel de referência é teste.
Se você tivesse algum método genérico, que precisasse saber qual é o tipo da classe correto para fazer alguma operação, aí você usaria o .class
nel
Simplesmente “viajei” agora. Como se bloquea um método para acessos simultaneos? Por default, um método já é disponível para n threads, para que ele seja acessível por uma única thread, ai precisamos utilizar o “syncronized”, mas nunca ouvi falar em “bloquear para várias threads simultaneamente”.
E outro detalhe, se é possível bloquer de alguma forma um método para uma única thread, por exemplo, em tempo de compilação, ou seja, sem utilizar o “syncronized” no método, gostaria que demonstrasse como, pois desejo adicionar ao meu “Livro Java”.
Abraços.
D
Dota
luiz.portnoy:
Dota:
luiz.portnoy:
Objetos são criados com a palavra new. Dessa forma, você só está pegando a definição da classe (o tipo dela).
Para acessar o método estático use Repetition.meuMetodoStatic();
Sim eu entendo que pra acessar métodos staticos pode ser dessa forma Repetition.static();
Não entendi o que vc quer dizer com “definiçao da classe (o tipo dela)”.
Por exemplo:
Stringteste=newString();
A definição da classe é String. O nome da váriavel de referência é teste.
Se você tivesse algum método genérico, que precisasse saber qual é o tipo da classe correto para fazer alguma operação, aí você usaria o .class
Ah ta, mas estranho que ao usar .class no bloco sincronizado eu consiga bloquear meus métodos statics.
D
Dota
nel:
Dota:
Eu sei que ao syncronizar com ".class" eu consigo bloquear meus métodos staticos para acesso simultaneos de threads.
Simplesmente "viajei" agora. Como se bloquea um método para acessos simultaneos? Por default, um método já é disponível para n threads, para que ele seja acessível por uma única thread, ai precisamos utilizar o "syncronized", mas nunca ouvi falar em "bloquear para várias threads simultaneamente".
E outro detalhe, se é possível bloquer de alguma forma um método para uma única thread, por exemplo, em tempo de compilação, ou seja, sem utilizar o "syncronized" no método, gostaria que demonstrasse como, pois desejo adicionar ao meu "Livro Java".
Abraços.
Eu disse que ao sincronizar dessa forma por exemplo:
public static void teste(){
synchronized(MinhaClasse.class){}
}
Estou bloqueando para que varios threads não acessam esse método simultaneamente, e outros métodos que forem sincronizados e staticos.
nel
Eu li e interpretei errado, pois imaginava que você havia dito que ele bloqueava para que o método somente fosse acessível por n threads.
Então, ok. A sua dúvida, é porque utilizando-se do .class não consegue acesso ao seu respectivo método estático perfeito?
Esta resposta você já teve, como foi dito acima, certo?
Abraços.
D
Dota
nel:
Eu li e interpretei errado, pois imaginava que você havia dito que ele bloqueava para que o método somente fosse acessível por n threads.
Então, ok. A sua dúvida, é porque utilizando-se do .class não consegue acesso ao seu respectivo método estático perfeito?
Esta resposta você já teve, como foi dito acima, certo?
Abraços.
À duvida é, se eu consigo bloquear acesso á metodos staticos com o .class, pq com um objeto da classe nao consigo acessar metodos staticos, logo que os mesmos sao da classe e nao da instancia.
luiz.portnoy
Dota, faz um teste assim:
Repetition.class.getMethods[];
Isso vai retornar uma array do tipo Method. Itere sobre ele e talvez você ache o método estático nessa iteração. Eu não tenho como testar aqui…
Marky.Vasconcelos
Nesse caso voce tem uma referencia ao Class dele, o Class guarda a estrutura da classe.
Voce pode acessar via Reflection seus métodos, atributos e construtores.
Mas ele não é um objeto da sua classe, então voce nunca vai conseguir invocar um método pelo nome.
nel
O GUJ mesmo disponibiliza um artigo muito interessante e prático sobre Reflection.
Efetuei um teste aqui e meu método estatico é invocado normalmente, entretanto, não verifiquei a questão de bloquear este método via reflection, se isto é possível é claro.
E se for, eu teria que pesquisar pois nunca precisei e/ou fiz algo assim
Abraços.
P.s: invoquei métodos de Objeto e da Classe, ou seja, método não-estático e estático.
D
Dota
nel:
O GUJ mesmo disponibiliza um artigo muito interessante e prático sobre Reflection.
Efetuei um teste aqui e meu método estatico é invocado normalmente, entretanto, não verifiquei a questão de bloquear este método via reflection, se isto é possível é claro.
E se for, eu teria que pesquisar pois nunca precisei e/ou fiz algo assim
Abraços.
P.s: invoquei métodos de Objeto e da Classe, ou seja, método não-estático e estático.
Muito legal essa questao do Reflection nao sabia.
Mas o que acontece realmente entao, nas questoes de thread quando sincronizamos com o “.class”, pois se o método for statico automaticamente pega o bloqueio da classe. Agora quando tentamos usar um objeto do tipo Class nao consiguimos vê-los.
nel
Dota:
nel:
O GUJ mesmo disponibiliza um artigo muito interessante e prático sobre Reflection.
Efetuei um teste aqui e meu método estatico é invocado normalmente, entretanto, não verifiquei a questão de bloquear este método via reflection, se isto é possível é claro.
E se for, eu teria que pesquisar pois nunca precisei e/ou fiz algo assim
Abraços.
P.s: invoquei métodos de Objeto e da Classe, ou seja, método não-estático e estático.
Muito legal essa questao do Reflection nao sabia.
Mas o que acontece realmente entao, nas questoes de thread quando sincronizamos com o “.class”, pois se o método for statico automaticamente pega o bloqueio da classe. Agora quando tentamos usar um objeto do tipo Class nao consiguimos vê-los.
Você quer dizer assim, .class.MetodoEstatico certo? Como já foi explicado, quando você tem o .class você tem a referência a classe e não a classe em si, como se você fizesse, SuaClasse.métodoEstatico. É a partir desta referência que é possível utilizar Reflection para invocar métodos e etc, inclusive, é possível chamar um método do tipo private.
Não sou especialista, estou bem longe disso, em Reflection, mas entenda que .class é uma referência a classe.
Abraços.