这个Java语法是什么意思? (`Class <! - ?扩展ContactAccessor - > clazz`)

时间:2012-06-06 10:48:55

标签: java generics reflection

我已经开发了大约1个月的Android应用程序了,现在我对Java语法非常熟悉,但今天我偶然发现了这段代码:

try {
    Class<? extends ContactAccessor> clazz =
                      Class.forName(className).asSubclass(ContactAccessor.class);
    sInstance = clazz.newInstance();
} catch (Exception e) {
    throw new IllegalStateException(e);
}

有人可以解释一下Class<? extends ContactAccessor> clazz的作用吗?

8 个答案:

答案 0 :(得分:2)

Class用于反射。 <>表示通用类型。 ?是通用通配符。结合这意味着clazz表示作为ContactAccessor的后代的类的定义。有关进一步说明,请访问genericswildcardsreflection

答案 1 :(得分:0)

这意味着您使用扩展特殊基类的类。这在Java中也称为泛型。

答案 2 :(得分:0)

这意味着你需要Class,它的类型是未知的(因此?)。但是你知道它的一个属性 - 它是ContactAccessor的子类。而且你需要找到那个特定的类 - 所以你这样做:Class.forName(className).asSubclass(ContactAccessor.class);说通过它的类获取类,它是ContactAccessor的子类。

答案 3 :(得分:0)

这是Java Generics的一个例子(更多here)。这意味着clazz变量将是一个扩展ContactAccessor的类型。

答案 4 :(得分:0)

这意味着您有一个Class,它是ContactAccessor类或该类或接口的子类。

由于你已经有ContactAccessor.class,我认为你有一个子类。

答案 5 :(得分:0)

它定义了一个变量clazz,它是扩展Class类的泛型类的ContactAccessor对象。

答案 6 :(得分:0)

使用通配符(“?”),以便Class只接受ContactAccessor扩展的类,只接受它们中的任何一个。

答案 7 :(得分:0)

subclassContactAccessor的任何类。