G*V 发帖数: 9 | 1 static Class extends Person>
有点C++模板的意思?
应该查什么方面 |
M***0 发帖数: 1180 | 2 Generics方面
再说你这个也不是Java里头的,Class后面的Generic不会有问号的 |
r*****l 发帖数: 2859 | 3 http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Look for "Bounded Wildcards"
【在 G*V 的大作中提到】 : static Class extends Person> : 有点C++模板的意思? : 应该查什么方面
|
G*V 发帖数: 9 | 4 ......
就是JAVA里面的啊,只是别人写的我看不懂而已
【在 M***0 的大作中提到】 : Generics方面 : 再说你这个也不是Java里头的,Class后面的Generic不会有问号的
|
G*V 发帖数: 9 | 5 谢谢,我来看看先
【在 r*****l 的大作中提到】 : http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf : Look for "Bounded Wildcards"
|
M***0 发帖数: 1180 | 6 问号只会出现在reference的定义面,不可能出现在class的定义里
这个绝对是你看错了
【在 G*V 的大作中提到】 : ...... : 就是JAVA里面的啊,只是别人写的我看不懂而已
|
G*V 发帖数: 9 | 7 看了一下好像就是基类以及其子类都适用的意思
不过别人写的以下代码我还是看得不是很懂,只懂大概意思
比如Person.class是啥?类名?然后先存在personClass?
接下来等别人调的时候再newInstance一个实例出来?
但是问题是要是Person.class是类名的话,它都放到personClass里面
那new出来的都是Person啊,那Person的子类Student就没法new出来了?
那这样又何必搞个 extends Person>那么复杂呢?实在不懂,求点拨
public class Person
{
static Class extends Person> personClass = Person.class;
public static void setPersonClass(Class extends Person> c)
{
personClass = c;
}
public static Person personFor()
{
Person person = personClass.newInstance();
return person;
}
}
【在 r*****l 的大作中提到】 : http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf : Look for "Bounded Wildcards"
|
M***0 发帖数: 1180 | 8 你如果要new出Student实例,要先调用setPersonClass(Student.class)
如果没有调用过setPersonClass,personFor默认返回的实例是Person类型
setPersonClass里头加了 extends Person>的目的
是为了让你在调用setPersonClass(XXX.class)的时候出现编译错误(只有当XXX是
Person或是Person的子类时才能通过)
如果你把2处 extends Person>都去掉,
那你可以通过setPersonClass(TheClassYouWant)
然后personFor()得到任何类型的实例
【在 G*V 的大作中提到】 : 看了一下好像就是基类以及其子类都适用的意思 : 不过别人写的以下代码我还是看得不是很懂,只懂大概意思 : 比如Person.class是啥?类名?然后先存在personClass? : 接下来等别人调的时候再newInstance一个实例出来? : 但是问题是要是Person.class是类名的话,它都放到personClass里面 : 那new出来的都是Person啊,那Person的子类Student就没法new出来了? : 那这样又何必搞个 extends Person>那么复杂呢?实在不懂,求点拨 : public class Person : { : static Class extends Person> personClass = Person.class;
|
g*****g 发帖数: 34805 | 9 这个东西教学用的吧?谁实践中这么写代码肯定被我骂死,
一点好处都没有。
【在 M***0 的大作中提到】 : 你如果要new出Student实例,要先调用setPersonClass(Student.class) : 如果没有调用过setPersonClass,personFor默认返回的实例是Person类型 : setPersonClass里头加了 extends Person>的目的 : 是为了让你在调用setPersonClass(XXX.class)的时候出现编译错误(只有当XXX是 : Person或是Person的子类时才能通过) : 如果你把2处 extends Person>都去掉, : 那你可以通过setPersonClass(TheClassYouWant) : 然后personFor()得到任何类型的实例
|
r*****l 发帖数: 2859 | 10 是你错了。如果定义class,“class”是小写的。LZ给的例子里“Class”是大写C。
【在 M***0 的大作中提到】 : 问号只会出现在reference的定义面,不可能出现在class的定义里 : 这个绝对是你看错了
|
r*****l 发帖数: 2859 | 11 Person.class is the class of Person. It's type is Class at compile
time.
If Student is Person's subclass. Student.class's compile time type is Class<
Student>
Class is NOT Class's sub class. They are NOT compatible at
compile time.
If the method takes type Class as parameter, you can pass in Person.class
and Student.class but you are not using generics.
If you use type Class as parameter, you cannot pass in Class
> as parameter (compile error). You have to use Class extends Person> in
order to pass in class of Person and class of any of Person's subclasses.
【在 G*V 的大作中提到】 : 看了一下好像就是基类以及其子类都适用的意思 : 不过别人写的以下代码我还是看得不是很懂,只懂大概意思 : 比如Person.class是啥?类名?然后先存在personClass? : 接下来等别人调的时候再newInstance一个实例出来? : 但是问题是要是Person.class是类名的话,它都放到personClass里面 : 那new出来的都是Person啊,那Person的子类Student就没法new出来了? : 那这样又何必搞个 extends Person>那么复杂呢?实在不懂,求点拨 : public class Person : { : static Class extends Person> personClass = Person.class;
|