2017-10-06 109 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