Yansıma kullanarak Java'da geri arama / temsilci desteği uyguladım. Ayrıntılar ve çalışma kaynağı web sitemde mevcuttur .
Nasıl çalışır
WithParms adında bir iç içe sınıf ile Geri Arama adlı bir ilke sınıfımız var. Geri aramaya ihtiyaç duyan API, parametre olarak bir Callback nesnesini alır ve gerekirse bir yöntem değişkeni olarak bir Callback.WithParms oluşturur. Bu nesnenin birçok uygulaması özyinelemeli olacağından, bu çok temiz çalışır.
Performans hala benim için yüksek bir öncelik ile, her çağırma için parametreleri tutmak için bir ıskarta nesne dizisi oluşturmak için gerekli değildi - sonuçta büyük bir veri yapısında binlerce öğe ve bir mesaj işleme olabilir senaryo saniyede binlerce veri yapısını işleyebiliriz.
Thread güvenli olması için, parametre dizisinin API yönteminin her çağrılması için benzersiz bir şekilde mevcut olması gerekir ve verimlilik için, geri çağrının her çağrılması için aynı dizinin kullanılması gerekir; Ben geri çağırma çağırma için bir parametre dizisi ile bağlamak için oluşturmak için ucuz olurdu ikinci bir nesne gerekiyordu. Ancak, bazı senaryolarda, invoker zaten başka nedenlerle bir parametre dizisine sahip olacaktır. Bu iki nedenden ötürü, parametre dizisi Geri Arama nesnesine ait değildi. Ayrıca, invokasyon seçimi (parametreleri bir dizi veya tek tek nesneler olarak geçirme), iç çalışmalarına en uygun invokasyonun hangisinin uygun olduğunu kullanmasını sağlayan geri arama özelliğini kullanarak API'nın elindedir.
WithParms nested class, o zaman isteğe bağlıdır ve iki amaca hizmet eder, geri arama çağrıları için gereken parametre nesnesi dizisini içerir ve parametre dizisini yükleyen ve daha sonra 10 aşırı yüklenmiş invoke () yöntemi (1'den 10 parametreye kadar) sağlar ve geri arama hedefini çağırır.