我已经开发了大约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
的作用吗?
答案 0 :(得分:2)
Class
用于反射。 <>
表示通用类型。 ?
是通用通配符。结合这意味着clazz
表示作为ContactAccessor
的后代的类的定义。有关进一步说明,请访问generics
,wildcards
和reflection
。
答案 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)
subclass
类ContactAccessor
的任何类。