我在查看oracle权利服务器API的同时遇到了一个预计上述参数类型的below语句。这是什么意思列表<Class <?扩展DataType >>?
FunctionEntry functionEntry = ...;
functionEntry.setParameterTypes(List<Class<? extends DataType>>);
我很难理解它要求什么。我只理解“扩展数据类型”。我需要传入setParameterTypes方法的什么类型的参数?
我在查看oracle权利服务器API的同时遇到了一个预计上述参数类型的below语句。这是什么意思列表<Class <?扩展DataType >>?
FunctionEntry functionEntry = ...;
functionEntry.setParameterTypes(List<Class<? extends DataType>>);
我很难理解它要求什么。我只理解“扩展数据类型”。我需要传入setParameterTypes方法的什么类型的参数?
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
,OpssInteger
和OpssDouble
是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);
它返回一个输入参数列表。
可以说,该函数使用可变数量的输入参数,它将返回最小所需输入的TYPES。 例如,逻辑函数AND和OR可以采用一定数量的输入参数,但需要最少2个OpssBoolean类型参数。因此,此方法将为AND或OR函数返回{OpssBoolean.class,OpssBoolean.class}。
你试图回答什么问题? – Seelenvirtuose
“我很难理解它要求什么。”我试图解释,这个functionEntry.setParameterTypes(列表
真的:您试图解释一个_setter_(名称以“set”开头的方法)返回一个输入参数列表?这是完全错误的。抱歉。 – Seelenvirtuose
其要价内List
该对象应该扩展DataType
类
它要求你传递一个List<MyDataType>
其中
public class MyDataType extends DataType
{
/* your data type stuff */
}
看到这里的详细信息,数据类型:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
它要求有关特定Class
对象的列表。在这种情况下,代表从DataType
类延伸的类别的Class
对象的列表。当你从这个类像伸出:
public class MySpecialDataType extends DataType
{
}
public class AnotherDataTypeToUse extends DataType
{
}
可以使用表达式MySpecialDataType.class
和AnotherDataTypeToUse.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()
的说法。
由于您的解释,我今天学习了Class对象。谢谢! – DaeYoung
[java.lang.Class中](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html) –