0

我已经开发 android 应用程序大约 1 个月了,现在我对 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是做什么的吗?

4

8 回答 8

2

Class用于反射。<>表示泛型类型。?是通用通配符。结合这意味着clazz表示一个类的定义,该类是ContactAccessor. 如需进一步解释,请在genericsgooglewildcardsreflection.

于 2012-06-06T10:51:56.337 回答
0

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

于 2012-06-06T10:51:13.863 回答
0

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

于 2012-06-06T10:51:58.920 回答
0

这是 Java 泛型的一个示例(更多信息请参见此处)。这意味着该clazz变量将属于 extends 类型ContactAccessor

于 2012-06-06T10:52:07.420 回答
0

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

既然你已经ContactAccessor.class有了,我会假设你有一个子类。

于 2012-06-06T10:52:13.057 回答
0

它定义了一个变量,该变量clazzClass扩展ContactAccessor该类的泛型类的对象。

于 2012-06-06T10:52:22.630 回答
0

使用通配符 ("?") 以便该类将仅接受由 ContactAccessor 扩展的类,仅接受这些类,但也接受它们中的任何一个。

于 2012-06-06T10:53:56.707 回答
0

任何属于类subclassContactAccessor类。

于 2012-06-06T11:15:32.410 回答