Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida Sobre Utilização de Funções Java no Clojure

Boa noite, pessoal!

Tenho uma dúvida em relação à utilização de funções Java no Clojure.

Porque a função contains, de CharSequence, pode ser invocada com . (.contains) enquanto que a função parseInt de Integer não? E porque o contrário também ocorre, a função parseInt pode ser invocada com a sintaxe Integer/parseInt enquanto que a função contains não pode ser invocada como CharSequence/contains?

4 respostas

Oi Giovani, tudo bem ?

"abc".contais("a");

Esse seria seu exemplo ?

Se for podemos fazer isso pois estamos manipulando uma classe, ou seja, a classe String, que detém esse método.

Enquanto no segundo caso, a classe String não possui um parseInt e sim a classe Integer, por esse motivo precisamos chamar o método estático para ser executado.

Opa, e aí, Matheus!

Acho que não fui claro, desculpe.

Meu questionamento é em relação ao ecossistema Clojure. Por exemplo, vc pode chamar (.contains string-qualquer "a") mas não pode chamar (.parseInt string-qualquer) e vc pode chamar (Integer/parseInt string-qualquer) mas não pode chamar (CharSequence/contains string-qualquer "a").

Queria entender a razão dessa diferença.

Editei o post para ficar mais clara minha dúvida.

solução!

Oi Giovani,

Acredito que entendi sua pergunta. Bom, o que acontece é que os métodos aproveitados do Java possuem diferença na chamada de acordo com seu tipo (Instância ou Estático).

Os métodos que são membros da instância podem ser chamados apenas com ., exemplo o .contains ele é membro da instância string-qualquer que é do tipo String. Porém ele não é um método estático da classe String.

O contrário acontece com o método estático parseInt (da classe Integer), como ele não é membro da instância string-qualquer ele deve ser chamado Integer/parseInt.

Espero ter respondido sua dúvida.

Nesse link tem mais informações sobre o que você perguntou: https://clojure.org/reference/java_interop

Oi, Heitor!

Perfeito, dúvida esclarecida. Obrigado!