在Java中优化类的想法

时间:2013-12-15 04:02:37

标签: java oop optimization constructor

这是我写的一个类,它感觉'笨重',就像应该有一个更好的方法来设置它,而不需要额外的方法setList()来实例化数组。我试图只留下与我的问题相关的部分,以及第一次抛出运行时(而不是编译时)错误时所做的事情的一个例子。我仍然习惯于解释语言,所以更严格的Java规则正在逐渐习惯。

public class Numbersplode
{
   // fields
   private int before;
   private int goal;
   private int[] processed;

   // constructors
   Numbersplode(int begin, int finish)
   {
      this.before = begin;
      this.goal = finish;
      this.processed = this.setList(begin);
      this.transList();
   }

   // mutators
   private int[] setList(int begin)
   {
      int[] result = new int[begin];
      return result;
   }

   public void transList()
   {
      // transforms the list
      int count;
      double temp;

      for (count = 0; count < this.before; count++)
      {
         temp = (double)count/(double)this.before * (double)this.goal;
         this.processed[count] = (int)temp;
      }
   }
}

似乎我应该能够避免使用setList()方法,但是当我尝试这个时(其他一切都相同):

public class Numbersplode
{
   // fields
   private int before;
   private int goal;
   private int[] processed = new int[before];

   // constructors
   Numbersplode(int begin, int finish)
   {
      this.before = begin;
      this.goal = finish;
      this.transList();
   }
[..............]

我收到java.lang.ArrayIndexOutOfBoundsException: 0,因为processed[]显然无法以这种方式定义。

额外的类似乎解决了这个问题,但在我看来,构造函数应该在创建对象的同时定义这些变量,从而允许同时定义数组processed以这种方式。

那么我还缺少一个更强大的优雅解决方案吗?如果我在解决之前找到一个,我会在这里发布。

修改

只是要清楚,如果我编译类(或者甚至是从该类创建对象的程序)我没有任何问题,直到我实际运行程序(因此运行时问题与编译时,但想要要清楚)

1 个答案:

答案 0 :(得分:2)

为什么甚至有一个setList()方法 - 一个私有(?)mutator。为什么不在构造函数中设置processed = new int[before]

Numbersplode(int before, int goal) {
  this.before = before;
  this.goal = goal;
  processed = new int[before];
  transList();
}