2010-06-01 19 views
8

Clojure'da bir Java Swing bileşenini genişletmeye çalışıyorum, yani bir javax.swing.JComponent öğesinin kapsamını genişletmek ve tüm standartların yanı sıra saf Clojure'da uygulanan bazı özel yöntemler eklemek istiyorum. yöntemleri.Clojure'da Java Swing sınıfını genişletme

Tek bir örnek (anonim iç sınıfla aynı şekilde) istiyorsam harika çalışan "proxy" yi kullanmayı denedim. Bununla birlikte, rasgele bir sayı örneği oluşturabilmem için adlandırılmış bir sınıfı gerçekten çok isterim.

Bunu yapmanın önerilen yolu nedir?

cevap

10

gen-class kullanın (bunu satır içi işlev olarak veya ad alanı bildiriminde kullanabileceğinizi unutmayın).

(gen-class :extends javax.swing.JComponent ...) 
+0

Teşekkürler Greg - Ancak bu AOT derlemesini kullanmak zorunda kalmam anlamına mı geliyor? Mümkünse REPL'de bunu tümüyle çalıştırmayı çok isterim. – mikera

+1

Evet, bu yaklaşımla AOT derlemesini kullanmak zorundasınız. Tamamen REPL'ye ihtiyacınız varsa, belki de proxy nesnesini döndüren bir işlevde çağrıyı proxy'ye gönderebilirsiniz. – Greg

+0

Teşekkürler Greg - proxy yöntemi çok güzel çalışıyor. Ardıl çağrıların tamamen yeni anonim sınıf tanımları üreteceğinden endişeliydim, fakat derleyicinin tek bir sınıf örneği oluşturmaya yetecek kadar akıllı olduğu anlaşılıyor. – mikera