我有两个类 第一个类里面有两个Sphere结构的参数 这两个参数将要传到第二个类里面去做运算第一个类用class.forName和newInstance 来自动创建第二个类的实例 然后调用第二个类里面的processFrame方法
class TestFramework {        .......... main()
        private static Sphere[] spheres;
        private static Sphere[] spheresBackup;        String submissionName = args[0];
        Submission student =
                (Submission)Class.forName(submissionName).newInstance();        ..........        int[] studentResult = student.processFrame(x,y,z);
第二个类需要我自己写 因为第二个类需要用到x, y, z这三个参数 但是在Class.forName里面的newInstance里面没有传入x,y和z这三个参数 第二个类 是该怎样获得这些参数呢?interface Submission {
        public int[] processFrame (double x,double y,double z) throws Exception;
}class mySubmission implements Submission {

//这里的构造方法应该怎样写才能获得TestFramework这个类的参数????

public int[] processFrame( final double x,final double y,final double z) throws Exception { }

}请大家尽量给一些代码 我刚开始学java 不是很厉害  谢谢大家

解决方案 »

  1.   

    Submission student =
                    (Submission)Class.forName(submissionName).newInstance();干嘛要这么来实例化一个类呢?可以把第二个类写个带x、y、z的构造函数,最后在第一个类中直接new就可以了。搞那么复杂干嘛?
      

  2.   

    .newInstance();只能调用无参的构造方法 再写一个初始化方法吧
      

  3.   

    可以这样调用有参数的构造函数Submission student =
      (Submission)Class.forName(submissionName).newInstance(new Object[]{new Integer(100),new Integer(200)});
      

  4.   

    写错了Class class = Class.forName(submissionName);
    Constructor[] cons = class.getDeclaredConstructors();
    if(cons[0].getParameterTypes().length>0){
        student = (Submission)cons[0].newInstance(new Object[]{new Integer(100),new Integer(200)});}
      

  5.   


    你好 调用无参的构造方法 在不改变本身TestFramework这个类的情况下有办法初始化吗?可不可以说的具体一些
      

  6.   


    谢谢你的代码 但是那个类我是不能乱改的  老师在他的机器上用那个类才测试我们所写的程序的 所以我们只能写class mySubmission implements Submission 这个类 有别的办法吗?
      

  7.   

    Submission 接口可能有多个实现类,看这个代码
     Submission student = (Submission)Class.forName(submissionName).newInstance();
      

  8.   

    class mySubmission implements Submission {
        
        //这里的构造方法应该怎样写才能获得TestFramework这个类的参数????
        
        public int[] processFrame( final double x,final double y,final double z) throws Exception {    }
        
    }为什么要在构造方法里得到x,y,z呢?看看有能不能不再构造函数里面取这些值
      

  9.   

    你好 是要从submission接口实现那个processFrame方法来进行运算 也可以自己添加一些别的方法 但是main函数里面那个语句是不可以改的 有什么办法可以把参数传进去吗?
      

  10.   

    public class Test {
        public int a, b;
        public Test(int a, int b) {
            this.a = a;
            this.b = b;
        };
    }Constructor<Test> c = Test.class.getDeclaredConstructor(int.class, int.class);
    Test test = c.newInstance(1, 2);
    System.out.println(test.a + " " + test.b);举个例子~
      

  11.   


    这些值是在main函数里随机生成的  不知道别的class里面 还可以怎样调用代码如下 for (int frame=0 ; frame<reps ; frame++) {
                            double x = ran.nextDouble()*10000;
                            double y = ran.nextDouble()*10000;
                            double z = ran.nextDouble()*10000;
     }
      

  12.   

    TestFramework是运行主类,那么你的mySubmission只写
     
     public int[] processFrame(double x,double y,double z) throws Exception {  }{}里面的逻辑就行,主类在int[] studentResult = student.processFrame(x,y,z);
    的时候自然会调用到的
      

  13.   


    这样啊   是不是x y跟z自动会传递到我的函数里面 我不用管的 我以为newInstance()不传入参数 我就没法用那个x y跟z了呢
      

  14.   

    newInstance()只是生成实例
    传参数是在调用方法int[] studentResult = student.processFrame(x,y,z);
    的时候传递进去的,你不用管,写好processFrame里面的逻辑就行了
      

  15.   


    好的  谢谢你 我刚开始学java 所以对基本的概念理解的不是很清楚 偏偏老师的作业很难