请教Leemaasn,还是关于创建类。 请大家也来看看。

zzh54zzh 2004-01-10 03:44:14
上贴多谢你帮我把问题解决,还有一事不明白,请大哥解答。

先看此静态过程:
static public void startServer(int port, Class rClass) {
ServerSocket ssocket;
try {
ssocket = new ServerSocket(port);
Socket eSocket = null;
try {
eSocket = ssocket.accept();
MTServerBase mtSB = null;

//***这几句是用的你的方法,传入构造函数的参数。
Class[] types = new Class[] { eSocket.getClass() };
Constructor constructor = rClass.getConstructor(types);
Object[] args = new Object[] { eSocket };
mtSB = (MTServerBase)constructor.newInstance(args);
//***

mtSB.start();
} catch (Exception e) {
try {eSocket.close();} catch (Exception ex) {}
}
} catch (IOException e) {
}
}

我认为既然newInstance能实现,那么new建立应该也能实现。
为什么mtSB = new (MTServerBase)rClass(eSocket);这样不行?此句替换上面“//***”相间的句子。如果类不能强制转换而实例可以强制转换的话,为什么
mtSB = (MTServerBase)constructor.newInstance(args); 可以呢?


注:
rClass是MTServerBase的子类。
...全文
30 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
danceflash 2004-01-10
  • 打赏
  • 举报
回复
哇~~~
楼上果然厉害
佩服、佩服
学习、学习 ^_^
Leemaasn 2004-01-10
  • 打赏
  • 举报
回复
楼主,
我下午在写篇文章,打算发表在CSDN的文档中心里,
没看到你发给我的消息;

楼上几位的说法基本上都表达了我的意思,
我再重复就是抄袭了。

嘿嘿。。。
分,我也不好意思要了。



^@^
老土豆T 2004-01-10
  • 打赏
  • 举报
回复
To ;
mtSB = (MTServerBase)constructor.newInstance(args);

这是一种创造方法,如果你看一些设计模式就会很明白。
danceflash 2004-01-10
  • 打赏
  • 举报
回复
1、创建实例不一定非要用new
2、用new创建实例就一定要知道类名,new 后面一定写的类的构造函数,而类的构造函数与类要同名
3、Class是一个类,而static public void startServer(int port, Class rClass)中的rClass不过是Class类的一个对象,而不是class,因此不能用new
danceflash 2004-01-10
  • 打赏
  • 举报
回复
mtSB = new (MTServerBase)rClass(eSocket);

rClass并不是一个类,而是Class对象,怎么能用new呢?
zzh54zzh 2004-01-10
  • 打赏
  • 举报
回复
请大家帮帮忙啊~
自己up~
zzh54zzh 2004-01-10
  • 打赏
  • 举报
回复
sorry,我的思路比较混乱,我就是想用new 来创建实例,如何创建? 我明明传入了class类型的参数,为什么不能new它?

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧