This could be categorized as syntactic sugar.  We can have different RefreshCallback policies that don't need to store an instance of the client internally.  For example,

public class MyRefreshCallback implements RefreshCallback {
     void postRefresh(DiscoveryClient client) {
          // Do something with the client.  
    }
}

RefreshCallback callback = new MyRefreshCallback();
client.registerRefreshCallback(callback);
...
client.unregisterRefreshCallback(callback);