Como retornar o valor DataSnapshot como resultado de um método?

Eu não tenho muita experiência com Java. Não tenho certeza se essa pergunta é estúpida, mas preciso obter um nome de usuário do banco de dados em tempo real do Firebase e retornar esse nome como resultado desse método. Então, descobri como obter esse valor, mas não entendo como retorná-lo como resultado desse método. Qual é a melhor forma de fazer isso?

private String getUserName(String uid) {
    databaseReference.child(String.format("users/%s/name", uid))
            .addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // How to return this value?
            dataSnapshot.getValue(String.class);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });
}

questionAnswers(3)

yourAnswerToTheQuestion