2015-05-21 15 views
6

Java'nın soyut yöntemleri ve soyut sınıflarının eşdeğerini elde etmek için Haxe'de bir yol var mı? Benim istediğimHaxe'de soyut ve özet olarak sınıfları ve yöntemleri açıklamanın bir yolu var mı?

ben almak mümkün oldum yakın bir arayüz olarak Process tanımlamak ve her iki yöntemlerini tanımlayan bir kavramsal soyut sınıfın ProcessA, onu uygulamaktır

// An abstract class. (Written in a Java/Haxe hybrid.) 
abstract class Process<A> { 
    public function then<B>(f : A -> Process<B>) : Process<B> { 
     var a : A = go() ; 
     return f(a) ; 
    } 

    abstract public function go() : A ; 
} 

// A concrete class. 
class UnitP<A> extends Process<A> { 
    var _a : A ; 

    public function new(a : A) { 
     _a = a ; } 

    public override function go() : A { return _a ; } 
} 

olduğu; go'un ProcessA'daki uygulaması çöküyor. Sonra kavramsal olarak benim somut sınıflarımı ProcessA'dan uzaklaştırabilirim.

+1

Haxe yönettiği "soyut" hayır, kutudan çıktığı böylece tamamen farklı bir şey vardır. Çözümünüz çalışıyor ve makrolarla (makrolarla ne mümkün değil) mümkün olabilir. – MSGhero

+0

Peki, çözümüm sadece sınırlı bir düzeyde çalışıyor. Somut bir sınıfta 'go' geçersiz kılmayı unuttuğumda veya 'ProcessA' öğesini başlatırsam derleme zamanı uyarısı yoktur. –

cevap

7

MSGhero tarafından belirtildiği gibi java stili özetler, Haxe tarafından doğal olarak desteklenmez. Andy Li karşılaştırılabilir işlevselliği ile Haxe sunmak için bir makro yazdım, bu yüzden olsa birkaç kişi tarafından talep edildi:

https://gist.github.com/andyli/5011520

+0

Bu makro haxelib'de kullanılabilir mi? – binki

+0

http://lib.haxe.org/search/?v=abstract –

0

Ben Haxe

  • eşdeğer bir şeyler yapacağıma nasıl yapıcı Set Özgün sınıfın hiçbir örneği oluşturulmasını sağlamak için özel.
  • Gerçekleştirilmesi gereken tüm yöntemlerle bir Arabirim oluşturun
  • Özetle gelen ve Arabirimi uygulayan bir sınıf oluşturun.

    // An interface 
    interface IProcess<A, B> { 
        public function then(f : A -> AProcess<B>) : AProcess<B>; 
    
        public function go() : A; 
    } 
    
    // An abstract class. 
    class AProcess<A, B> { 
        private function new() {} 
    
        public function then<B>(f : A -> AProcess<B>) : AProcess<B> { 
         var a : A = go() ; 
         return f(a) ; 
        } 
    
        private function go() : A {}; 
    } 
    
    // A concrete class. 
    class UnitP extends AProcess<A, B> implements IProcess { 
        var _a : A ; 
    
        public function new(a : A) { 
         super(); 
         _a = a ; 
        } 
    
        public function go() : A { return _a ; } 
    } 
    
+1

Neredeyse sahip olduğum (ve hala sahip olduğum). Süper sınıfın kurucusunu çağırmak için açık çağrı "süper()" ye mi ihtiyaç duyuyor? (Java'da, "super" ya da "this" için açık bir çağrı yoksa super() öğesine yapılan çağrı örtülüdür.) –

İlgili konular