这是什么意思List&lt;班级<! - ?扩展DataType - >&gt;?

时间:2017-10-06 16:27:05

标签: java

我遇到了一个下面的语句,它在审查oracle权利服务器API时需要上述参数类型。

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

我很难理解它的要求。我只明白了#34;?扩展DataType&#34;。我需要将哪种类型的参数传递给setParameterTypes方法?

5 个答案:

答案 0 :(得分:2)

它要求提供特定Class个对象的列表。在这种情况下,Class对象列表表示从DataType类扩展的类。当您从这个类扩展时:

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()的参数。

答案 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的子类。例如,类OpssBooleanOpssIntegerOpssDouble是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