请教关于Class.forName(str).newInstance()的问题:

lord_is_layuping 2007-11-05 12:44:07
下面的代码当我输入一个正确的类如Palne时,(Common) Class.forName("CalTime.vehicle."+args[0]).newInstance()这一句能够正确执行;
当我输入一个从为定义过的类如Abc时,(Common) Class.forName("CalTime.vehicle."+args[0]).newInstance()这一句有异常,但catch也能捉到;
但是,当我输入一个已经定义过的类,而类名的大小写打错时(如输入pLAne),怎么会即不能执行,又捉不到异常呢?
应该如何解决呢?不知道错误从哪个地方冒出来的,难道非得有一个这么一个系统类的方法把父类的所有子类的字符串形式都计算出来吗,有这样一个类和方法吗?
----------------------------
try {
Common d=(Common) Class.forName("CalTime.vehicle."+args[0]).newInstance();
v=d.runTimer(A,B,C);
t=1000/v;
System.out.println("平均速度: "+v+" km/h");
System.out.println("运行时间:"+t+" 小时");
}
catch(Exception e) {
System.out.println("class not found");
}


目录结构
CalTime
--------|--------
| |
| |
vehicle ComputTime.java
|
---------
| |
| |
all Palne.java /Car.java
|
|
Common.java
...全文
334 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lord_is_layuping 2007-11-07
  • 打赏
  • 举报
回复
# neptune0229,还有其他办法吗?

大大们啊,叫我一下啊
flyforlove 2007-11-07
  • 打赏
  • 举报
回复
你们会有这种需求么?
如果有人把Bus改成Car了,你打算怎么对应?
过度设计一定要避免。
lord_is_layuping 2007-11-05
  • 打赏
  • 举报
回复
谢谢args[0]参数,现在我就是怎么作的,我得到args[0]参数后把他的第一个字符(如是p)默认改为大写,并且把第一个字符后的字符全都该为小写(如pLAne的LAne该为lane);
但是我怕老师说我的程序不过灵活啊,老师说他想定义一个什么子类(如Bus)就定义一个什么子类;如果他定义一个Bus类那还好,但如果他定义一个BUS类,那我上面对args[0]参数的大小写处理不全反了吗(如我输入BUS,程序则改为了Bus,又会有错不能执行了。)
lord_is_layuping 2007-11-05
  • 打赏
  • 举报
回复
高手们,帮我看看怎么办

代码如下:
1. ComputTime.java 请确保输入正确,其中没有捕捉NumberFromatException
1import CalTime.vehicle.all.Common;
2import java.lang.*;
3
4public class ComputeTime {
5 public static void main(String args[]) {
6 System.out.println("交通工具: "+args[0]);
7 System.out.println(" 参数A: "+args[1]);
8 System.out.println(" 参数B: "+args[2]);
9 System.out.println(" 参数C: "+args[3]);
10 double A=Double.parseDouble(args[1]);
11 double B=Double.parseDouble(args[2]);
12 double C=Double.parseDouble(args[3]);
13
14 double v,t;
15 try {
16 Common d=(Common) Class.forName("CalTime.vehicle."+args[0]).newInstance();
17 v=d.runTimer(A,B,C);
18 t=1000/v;
19 System.out.println("平均速度: "+v+" km/h");
20 System.out.println("运行时间:"+t+" 小时");
21 } catch(Exception e) {
22 System.out.println("class not found");
23 }
24 }
25}
26
27
2.Plane.java
1 package CalTime.vehicle;
2
3 import CalTime.vehicle.all.Common;
4
5 public class Plane implements Common {
6 public double runTimer(double a, double b, double c) {
7 return (a+ b + c);
8 }
9 }
10
3. Car.java

1package CalTime.vehicle;
2
3import CalTime.vehicle.all.Common;
4
5public class Car implements Common {
6 public double runTimer(double a, double b, double c) {
7 return ( a*b/c );
8 }
9}
10
4.Common.java
1package CalTime.vehicle.all;
2
3public interface Common {
4 double runTimer(double a, double b, double c);
5}
6
neptune0229 2007-11-05
  • 打赏
  • 举报
回复
自己写个方法把args[0]格式化一下,格式化成你的类名的通用格式

62,623

社区成员

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

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