2012-06-06 29 views
0

我一直在开发Android应用程序为1个月左右,现在我得到相当熟悉Java的语法,但今天我偶然发现了这段代码:这个Java语法是什么意思? (`类<?延伸ContactAccessor> clazz`)

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

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

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

0

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

2

Class用于反射。 <>表示通用类型。 ?是通用通配符。组合这意味着clazz代表作为ContactAccessor的后裔的类的定义。为进一步解释,谷歌为generics,wildcardsreflection

+1

+1解释什么'Class'实际上是。 –

0

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

0

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

0

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

0

使用通配符(“?”),以便该类只接受由ContactAccessor扩展的类,而不仅仅接受这些类,但也接受它们中的任何类。

0

任何等级的subclassContactAccessor类。