Referências do método Java 8 chamadas em uma variável local

Estou no processo de aprender Java 8 e me deparei com algo que acho um pouco estranho.

Considere o seguinte trecho:

private MyDaoClass myDao;

public void storeRelationships(Set<Relationship<ClassA, ClassB>> relationships) {
    RelationshipTransformer transformer = new RelationshipTransformerImpl();

    myDao.createRelationships(
            relationships.stream()
            .map((input) -> transformer.transformRelationship(input))
            .collect(Collectors.toSet())
    );
}

Basicamente, preciso mapear o conjunto de entrada chamadorelationships para um tipo diferente para estar em conformidade com a API do DAO que estou usando. Para a conversão, eu gostaria de usar um existenteRelationshipTransformerImpl classe que eu instanciao como uma variável local.

Agora, aqui está a minha pergunta:

Se eu fosse modificar o código acima da seguinte maneira:

public void storeRelationships(Set<Relationship<ClassA, ClassB>> relationships) {
    RelationshipTransformer transformer = new RelationshipTransformerImpl();

    myDao.createRelationships(
            relationships.stream()
            .map((input) -> transformer.transformRelationship(input))
            .collect(Collectors.toSet())
    );

    transformer = null;  //setting the value of an effectively final variable
}

Eu obviamente receberia um erro de compilação, já que a variável localtransformer não é mais "efetivamente final". No entanto, se substituir o lambda por uma referência de método:

public void storeRelationships(Set<Relationship<ClassA, ClassB>> relationships) {
    RelationshipTransformer transformer = new RelationshipTransformerImpl();

    myDao.createRelationships(
            relationships.stream()
            .map(transformer::transformRelationship)
            .collect(Collectors.toSet())
    );

    transformer = null;  //setting the value of an effectively final variable
}

Então não recebo mais um erro de compilação! Por que isso acontece? Eu pensei que as duas maneiras de escrever a expressão lambda deveriam ser equivalentes, mas há claramente algo mais acontecendo.

questionAnswers(3)

yourAnswerToTheQuestion