Jiri Bruchanov
05/02/2020, 10:26 AMJiri Bruchanov
05/02/2020, 10:27 AMclass View{}
interface XYZ { }
class XYZView extends View implements XYZ { }
class MyClass<T extends View> {
public MyClass(T view, XYZ xyz) {
}
public <X extends View & XYZ> MyClass(X x) {
this((T)x, x);
}
}
public static void main(String[] args) {
new MyClass(new View(), new XYZ() {});
new MyClass(new XYZView());
}
Shawn
05/02/2020, 11:04 AMopen class View
interface XYZ
class XYZView : View(), XYZ
class MyClass<T : View>(view: T, xyz: XYZ) {
companion object {
operator fun <X> invoke(x: X): MyClass<X>
where X : View, X : XYZ {
return MyClass(x, x)
}
}
}
fun main() {
MyClass(View(), object : XYZ {})
val xyzClass: MyClass<XYZView> = MyClass(XYZView())
}