É mesmo possível?
java
anonymous-function
Aarona
fonte
fonte
Respostas:
se você quer dizer uma função anônima e está usando uma versão do Java anterior ao Java 8, em uma palavra, não. ( Leia sobre as expressões lambda se você usar Java 8+ )
No entanto, você pode implementar uma interface com uma função como esta:
e você pode usar isso com classes internas para obter uma função quase anônima :)
fonte
Aqui está um exemplo de uma classe interna anônima.
Isso não é muito útil como é, mas mostra como criar uma instância de uma classe interna anônima que
extends Object
e@Override
seustoString()
método.Veja também
Classes internas anônimas são muito úteis quando você precisa implementar um
interface
que pode não ser altamente reutilizável (e, portanto, não vale a pena refatorar para sua própria classe nomeada). Um exemplo instrutivo é usar um modelojava.util.Comparator<T>
para classificação.Aqui está um exemplo de como você pode classificar com
String[]
base emString.length()
.Observe o truque de comparação por subtração usado aqui. Deve ser dito que esta técnica é quebrada em geral: ela só é aplicável quando você pode garantir que não irá estourar (como é o caso com
String
comprimentos).Veja também
fonte
EventListener
(sub) implementações no aplicativo Swing médio.Linked
barra lateral, então estou fazendo o meu melhor para fazer uso dela.Com a introdução da expressão lambda no Java 8, agora você pode ter métodos anônimos.
Digamos que eu tenha uma aula
Alpha
e desejo filtrarAlpha
s em uma condição específica. Para fazer isso, você pode usar umPredicate<Alpha>
. Esta é uma interface funcional que possui um métodotest
que aceita umAlpha
e retorna umboolean
.Supondo que o método de filtro tenha esta assinatura:
Com a antiga solução de classe anônima, você precisaria de algo como:
Com os lambdas do Java 8 você pode fazer:
Para obter informações mais detalhadas, consulte o tutorial de Expressões Lambda
fonte
Classes internas anônimas que implementam ou estendem a interface de um tipo existente foram feitas em outras respostas, embora seja importante notar que vários métodos podem ser implementados (geralmente com eventos no estilo JavaBean, por exemplo).
Um recurso pouco conhecido é que, embora as classes internas anônimas não tenham um nome, elas têm um tipo. Novos métodos podem ser adicionados à interface. Esses métodos só podem ser chamados em casos limitados. Principalmente diretamente na
new
própria expressão e dentro da classe (incluindo inicializadores de instância). Isso pode confundir os iniciantes, mas pode ser "interessante" para a recursão.(Escrevi originalmente usando, em
node
vez decur
noprint
método. Diga NÃO à captura definal
locais " implicitamente "? )fonte
node
deve ser declaradofinal
aqui.cur
."Node" +
para tornar um segundo método necessário). / Eu não tenho nome. Talvez eu pudesse criar uma pergunta de "enquete" (CW) de nomenclatura e recebê-la no esquecimento.Sim, se você estiver usando o java mais recente, que é a versão 8. Java8 torna possível definir funções anônimas que eram impossíveis nas versões anteriores.
Vamos dar exemplos de documentos java para saber como podemos declarar funções anônimas, classes
Sintaxe de classes anônimas
Considere a instanciação do objeto FrenchGreeting:
A expressão de classe anônima consiste no seguinte:
new
operadoraO nome de uma interface a ser implementada ou uma classe a ser estendida. Neste exemplo, a classe anônima está implementando a interface HelloWorld.
Parênteses que contêm os argumentos para um construtor, assim como uma expressão normal de criação de instância de classe. Nota: Quando você implementa uma interface, não há construtor, então você usa um par vazio de parênteses, como neste exemplo.
Um corpo, que é um corpo de declaração de classe. Mais especificamente, no corpo, as declarações de método são permitidas, mas as instruções não.
fonte