介面宣告變數的一個實際例子
阿新 • • 發佈:2019-02-01
java自學者,如果錯誤,還請多多指教。實際工作中在重寫UDTF子類的process方法的時候,遇到了一個forward方法,在研究原始碼的過程中對介面的概念更為清晰了。
UDTF介面說明如下:
Java UDTF需要繼承com.aliyun.odps.udf.UDTF類。這個類需要實現4個介面。
其中forward方法如下
protected void
forward(Object... outs)
throws
UDFException {
this.collector.collect(outs);
}
collector是介面UDTFCollector宣告的變數,
private
UDTFCollector collector;
UDTFCollector宣告如下的collect方法,
public interface
UDTFCollector
extends
DataCollector {
void
collect(Object[] var1);
}
既然forward方法是使用者輸出資料的方法,那它究竟如何傳遞引數呢?這就是介面宣告一個變數的用處了。
介面通常被使用在Java程式語言,用來做回撥函式使用 。Java並不允許方法作為引數傳遞使用,因此,其中一個解決辦法則是可以定義一個介面,
把這個介面當成方法的引數,以此來使用該項物件的方法簽名。問題又來了,那什麼是方法簽名呢?
所謂方法簽名就由方法名+形參列表構成,也就是說,方法名和形引數據型別列表可以唯一的確定一個方法,與方法的返回值一點關係都沒有,
而這也是判斷過載重要依據。
於是歸納如下,forward方法使用UDFCollector宣告的collector裡面的collect方法,於是給forward傳參時就確定了一個對應的方法簽名從而在UDTF函式
解析出輸出引數。