class A<T> { public var a:T; function new () { a= new T(); }}@:generic class A<T:(String,Float)> {
var a:T;
public function new(s:Dynamic) { a = new T(s); }}
class Test { public function new(s) trace(s);
static function main() { var a = new A<String>("hi"); var b = new A<Float>(10.23); }}import haxe.Constraints.Constructible;
@:generic class A<P:Constructible<Void->Void>, T:Constructible<P->Void>> {
var a:T;
public function new() {
a = new T(new P());
}
}
class ParamA {
public var paramA = "ParamA";
public function new() trace("Constructing ParamA");
public function toString() return paramA;
}
class ParamB {
public var paramB = "ParamB";
public function new() trace("Constructing ParamB");
public function toString() return paramB;
}
@:generic class MyA<PA:Constructible<Void->Void>> {
public function new() trace(new PA() + " from MyA");
}
@:generic class MyB<PB:Constructible<Void->Void>> {
public function new() trace(new PB() + " from MyB");
}
class Test {
static function main() {
var a = new A<ParamA, MyA<ParamA>>();
var b = new A<ParamB, MyB<ParamB>>();
var c = new A<ParamB, MyA<ParamB>>();
var d = new A<ParamA, MyB<ParamA>>();
}
}