在Java中将对象传递给不同的库

时间:2014-12-03 10:08:55

标签: java object libraries pass-by-value

这是关于将Object传递到其他库或项目的最佳实践的问题。

假设我们有一个叫做学生和成绩的课程。

 import Grades; 

 public class Student (){
      String StudentName;
      String StudentID;
      int age;
      int gradeForMath;
      int gradeForScience;
      Grades otherGrades; 
 }

现在在我们的主课程中,我想将Grades课程和一些Integers传递到一个库中,以计算学生明年通过的可能性。

 public static void main (){
      MyExternalLibraryCalculatingPassRate passRate = new MyExternalLibraryCalculatingPassRate(Grades otherGrades, int math, int science); 
 }

但是,我的问题是图书馆对Grades没有可见性,也没有名为Grades的类。我的问题是,这样做的最佳方式是什么?我有以下两个想法,但我不确定是否有更好或更糟的方式 -

  1. 传递Grades的基础数据结构。例如,如果我们可以将等级归结为散列图或arraylist,或者什么然后通过它?

  2. 在库中创建一个Grades类并将其导入到项目中并使用项目库中的Grades类,而不在项目中声明Grades类?

  3. 我不相信这两种方法都很好 - 但最佳做法是什么?还是常见的?

2 个答案:

答案 0 :(得分:1)

您的库和主项目似乎在同一个域上运行,所以我认为最好的想法就是共享通用数据模型。如果MyExternalLibraryCalculatingPassRate计算Student将通过的概率,则可能最好使方法使用Student对象,而不是Grades和两个基元。通常,混合对象和基元来表示相同的概念是一个坏主意。

- 更新

我发现此代码存在其他问题,Student类只有字段。因此,如果其他课程想要获得成绩,他们应该知道成绩的内部表示(一个Grades字段和两个ints),这通常是坏事。

答案 1 :(得分:1)

您可以在外部库中定义一个接口,该接口指定必须如何组织数据但不提供实现。 例如:

public class StudentPassRateData {
      int getGradeForMath();
      int getGradeForScience();
}

然后,在主项目中,您可以定义一个实现此接口的类:

public class Student implements StudentPassRateData {
      private String StudentName;
      private String StudentID;
      private int age;
      private int gradeForMath;
      private int gradeForScience;
      private Grades otherGrades; 

      int getGradeForMath() {return gradeForMath;}
      int getGradeForScience() {return gradeForScience;}
 }