我遇到了一个下面的语句,它在审查oracle权利服务器API时需要上述参数类型。
FunctionEntry functionEntry = ...;
functionEntry.setParameterTypes(List<Class<? extends DataType>>);
我很难理解它的要求。我只明白了#34;?扩展DataType&#34;。我需要将哪种类型的参数传递给setParameterTypes方法?
答案 0 :(得分:2)
它要求提供特定Class
个对象的列表。在这种情况下,Class
对象列表表示从DataType
类扩展的类。当您从这个类扩展时:
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()
的参数。
答案 1 :(得分:1)
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);
答案 2 :(得分:-1)
返回输入参数列表。
可以说,此函数采用可变数量的输入参数,它将返回所需最小输入的TYPES。 例如,逻辑函数AND和OR可以采用未绑定数量的输入参数,但需要最少2个OpssBoolean类型参数。因此,此方法将为AND或OR函数返回{OpssBoolean.class,OpssBoolean.class}。
答案 3 :(得分:-1)
它要求List
中的对象应该扩展DataType
类
答案 4 :(得分:-1)
要求您传递List<MyDataType>
public class MyDataType extends DataType
{
/* your data type stuff */
}
有关数据类型的详细信息,请参阅此处: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html