avatar
这玩意是啥?# Java - 爪哇娇娃
G*V
1
static Class
有点C++模板的意思?
应该查什么方面
avatar
M*0
2
Generics方面
再说你这个也不是Java里头的,Class后面的Generic不会有问号的
avatar
G*V
4
......
就是JAVA里面的啊,只是别人写的我看不懂而已

【在 M***0 的大作中提到】
: Generics方面
: 再说你这个也不是Java里头的,Class后面的Generic不会有问号的

avatar
M*0
6
问号只会出现在reference的定义面,不可能出现在class的定义里
这个绝对是你看错了

【在 G*V 的大作中提到】
: ......
: 就是JAVA里面的啊,只是别人写的我看不懂而已

avatar
G*V
7
看了一下好像就是基类以及其子类都适用的意思
不过别人写的以下代码我还是看得不是很懂,只懂大概意思
比如Person.class是啥?类名?然后先存在personClass?
接下来等别人调的时候再newInstance一个实例出来?
但是问题是要是Person.class是类名的话,它都放到personClass里面
那new出来的都是Person啊,那Person的子类Student就没法new出来了?
那这样又何必搞个那么复杂呢?实在不懂,求点拨
public class Person
{
static Class personClass = Person.class;
public static void setPersonClass(Class 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"

avatar
M*0
8
你如果要new出Student实例,要先调用setPersonClass(Student.class)
如果没有调用过setPersonClass,personFor默认返回的实例是Person类型
setPersonClass里头加了的目的
是为了让你在调用setPersonClass(XXX.class)的时候出现编译错误(只有当XXX是
Person或是Person的子类时才能通过)
如果你把2处都去掉,
那你可以通过setPersonClass(TheClassYouWant)
然后personFor()得到任何类型的实例

【在 G*V 的大作中提到】
: 看了一下好像就是基类以及其子类都适用的意思
: 不过别人写的以下代码我还是看得不是很懂,只懂大概意思
: 比如Person.class是啥?类名?然后先存在personClass?
: 接下来等别人调的时候再newInstance一个实例出来?
: 但是问题是要是Person.class是类名的话,它都放到personClass里面
: 那new出来的都是Person啊,那Person的子类Student就没法new出来了?
: 那这样又何必搞个那么复杂呢?实在不懂,求点拨
: public class Person
: {
: static Class personClass = Person.class;

avatar
g*g
9
这个东西教学用的吧?谁实践中这么写代码肯定被我骂死,
一点好处都没有。

【在 M***0 的大作中提到】
: 你如果要new出Student实例,要先调用setPersonClass(Student.class)
: 如果没有调用过setPersonClass,personFor默认返回的实例是Person类型
: setPersonClass里头加了的目的
: 是为了让你在调用setPersonClass(XXX.class)的时候出现编译错误(只有当XXX是
: Person或是Person的子类时才能通过)
: 如果你把2处都去掉,
: 那你可以通过setPersonClass(TheClassYouWant)
: 然后personFor()得到任何类型的实例

avatar
r*l
10
是你错了。如果定义class,“class”是小写的。LZ给的例子里“Class”是大写C。

【在 M***0 的大作中提到】
: 问号只会出现在reference的定义面,不可能出现在class的定义里
: 这个绝对是你看错了

avatar
r*l
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 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出来了?
: 那这样又何必搞个那么复杂呢?实在不懂,求点拨
: public class Person
: {
: static Class personClass = Person.class;

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。