2017-10-06 111 views
1

我在查看oracle權利服務器API的同時遇到了一個預計上述參數類型的below語句。這是什麼意思列表<Class <?擴展DataType >>?

FunctionEntry functionEntry = ...; 
functionEntry.setParameterTypes(List<Class<? extends DataType>>); 

我很難理解它要求什麼。我只理解「擴展數據類型」。我需要傳入setParameterTypes方法的什麼類型的參數?

+0

[java.lang.Class中](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html) –

回答

1

A List<Class<?>>Class個物體的列表,例如,

Arrays.asList(String.class, Boolean.class, Pattern.class)` 

List<Class<? extends T>>是隻能包含T的Class對象和它的子類例如一個列表List<Class<? extends CharSequence>>可以是

Arrays.asList(String.class, StringBuffer.class, StringBuilder.class, CharSequence.class)` 

的語句定義的類型每個所述FunctionEntry需要的參數。雖然,鍵入它的方式在語法上不正確。的setParameterTypes定義是

setParameterTypes(java.util.List<java.lang.Class<? extends DataType>> parameters) 

所以它期待的對應參數類型的函數要定義,與添加的需求,該類型必須是DataType子類的列表。例如,類別OpssBoolean,OpssIntegerOpssDouble是Oracle API中DataType的子類。所以,如果你想要這個API,它接受一個OpssBoolean作爲第一個參數,一個OpssInteger作爲第二個參數,以及OpssDouble作爲第三個參數中定義的函數,你定義它是這樣的:

List<java.lang.Class<? extends DataType>> parameterTypes = Arrays.asList(
    OpssBoolean.class, OpssInteger.class, OpssDouble.class 
); 
functionEntry.setParameterTypes(parameterTypes); 
-1

它返回一個輸入參數列表。

可以說,該函數使用可變數量的輸入參數,它將返回最小所需輸入的TYPES。 例如,邏輯函數AND和OR可以採用一定數量的輸入參數,但需要最少2個OpssBoolean類型參數。因此,此方法將爲AND或OR函數返回{OpssBoolean.class,OpssBoolean.class}。

+0

你試圖回答什麼問題? – Seelenvirtuose

+0

「我很難理解它要求什麼。」我試圖解釋,這個functionEntry.setParameterTypes(列表>); 返回輸入參數列表。 不幸的是,我不知道問題是什麼參數。但是我的例子包括類參數,這是他要求的類型(雖然不是確切的) – yatinsingla

+1

真的:您試圖解釋一個_setter_(名稱以「set」開頭的方法)返回一個輸入參數列表?這是完全錯誤的。抱歉。 – Seelenvirtuose

-1

其要價內List該對象應該擴展DataType

2

它要求有關特定Class對象的列表。在這種情況下,代表從DataType類延伸的類別的Class對象的列表。當你從這個類像伸出:

public class MySpecialDataType extends DataType 
{ 
} 

public class AnotherDataTypeToUse extends DataType 
{ 
} 

可以使用表達式MySpecialDataType.classAnotherDataTypeToUse.class(所謂的「類文本」),以獲得可分配給Class<? extends DataType>變量的對象。

Class<MySpecialDataType> clazzOne = MySpecialDataType.class; 
Class<AnotherDataTypeToUse> clazzTwo = AnotherDataTypeToUse.class; 
Class<? extends DataType> baseClazz = clazzOne; // works 
baseClazz = clazzTwo; // also works 
List<Class<? extends DataType>> clazzes = new ArrayList<Class<? extends DataType>>(); 
clazzes.add(clazzOne); 
clazzes.add(clazzTwo); 

functionEntry.setParameterTypes(clazzes); 

你可能想看看Arrays.asList()setParameterTypes()的說法。

+0

由於您的解釋,我今天學習了Class對象。謝謝! – DaeYoung