如果您從Scala 2.10.2中選擇類scala.runtime.AbstractPartialFunction
(我沒有檢查其他版本)並比較AbstractPartialFunction.class.getInterfaces()
和AbstractPartialFunction.class.getGenericInterfaces()
的輸出,您可能會注意到,結果不匹配。通用接口是scala.Function1<T1, R>
和scala.PartialFunction<T1, R>
,而getInterfaces()只返回scala.PartialFunction
。形成scala文檔我可以看到通用信息是正確的,因爲PartialFunction是一個Function1。Class#getInterfaces()和Class#getGenericInterfaces()返回不同長度的數組
爲getInterfaces的Javadoc說:
如果該對象表示一個類,返回值是包含表示由類實現的所有接口的對象的數組。數組中接口對象的順序對應於由此對象表示的類的聲明的implements子句中的接口名稱的順序。
和getGenericInterfaces具有完全相同的文本。
從那裏(和其他文本,包括stackoverflow信息)我會得出結論,秩序和數組的長度是相等的。只有這不是這種情況。爲什麼?
到目前爲止,我能夠重現這與幾個java7和java8,沒有嘗試java6甚至java5。
編輯:
的javap的輸出爲AbstractPartialFunction(僅當然的報頭)爲:
Compiled from "AbstractPartialFunction.scala"
public abstract class scala.runtime.AbstractPartialFunction<T1, R> implements scala.Function1<T1, R>, scala.PartialFunction<T1, R>`
使用ASM lib和所述Textifier那裏我可以看到這個報頭信息:
// class version 50.0 (50)
// access flags 0x421
// signature <T1:Ljava/lang/Object;R:Ljava/lang/Object;>Ljava/lang/Object;Lscala/Function1<TT1;TR;>;Lscala/PartialFunction<TT1;TR;>;
// declaration: scala/runtime/AbstractPartialFunction<T1, R> implements scala.Function1<T1, R>, scala.PartialFunction<T1, R>
public abstract class scala/runtime/AbstractPartialFunction implements scala/PartialFunction
加上一個ScalaSigAttribute。當然,我並沒有表現出在這兩種情況下
神奇的「通用」字呢? – Antoniossss
我知道一個有泛型信息,另一個沒有。這不是問題 – blackdrag
當你用javap檢查類型時,你會看到什麼? – McDowell