[英]can java return type write like Scala this.type
我想在Scala中編寫一些這樣的Java代碼
class A {
def fun1(): this.type = {
this
}
}
class B extends A{
def fun2(): this.type = {
print("b")
this
}
}
object Test{
def main(args: Array[String]): Unit = {
new B().fun1().fun2()
}
}
但是我不能,如果可以將方法的隱式this參數用於類型推斷,我可以這樣寫:
class A{
static <T extends A> T fun1(T t) {
return t;
}
}
第一個參數就像非靜態方法的第一個隱式此參數一樣。但是這個靜態方法不是我想要的。
有什么辦法可以這樣寫而不覆蓋子類嗎?
遺憾的是,您不能這樣做,因為類型是在Java的運行時處理的,因此不能用於更復雜的東西(例如,創建新的Instance,Array,檢查類型是什么,...)
我喜歡使用的方式是這樣的:
public abstract class A<T extends A> {
public abstract T getType();
}
public class B extends A<B> {
@Override
public B getType() {
return this;
}
}
這樣可確保您始終擁有擴展主類的“最新”類,該類隨后可用於流水線處理或任何您需要的操作。
這是一個非常有趣的問題,所以我寫了這樣的東西。 我認為這絕對不是在現實生活中使用的好方法,但是看起來很有趣。
public class A<T> {
T fun1(){
return getType();
}
T getType(){
return (T)this;
}
}
class B<T> extends A<T> {
T fun2(){
System.out.println("b");
return getType();
}
}
class C<T> extends B<T> {
T fun3(){
System.out.println("c2");
return getType();
}
}
現在,請抓住某件事,因為它變得怪異了。 如果要鏈接這些方法,則需要執行以下操作:
new C<C<C<C<C<C>>>>>().fun3().fun1().fun2().fun1().fun2().fun1();
由於類型擦除,last fun1將返回Object。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.