代码样式:"隐藏"数据类型(Java)

Mac*_*cks 2 java types conventions

我正在研究一组课程来表示音符,小节,节奏等.当然,我将不得不处理最好用分数表示的时间签名(如4/4,3/4等).

我想知道什么是更好的风格.使用Bar的构造函数包含Fraction-object或仅包含两个int作为时间签名.

public Bar(Fraction timeSignature) {
    this.timeSignature = timeSignature;
}
Run Code Online (Sandbox Code Playgroud)

要么:

public Bar (int num, int den) {
    timeSignature = new Fraction(num, den);
}
Run Code Online (Sandbox Code Playgroud)

我的意思是......我可以同时拥有这两个但我应该在申请中选择哪一个?是否有"更好"的风格?

谢谢你的想法!

Mic*_*ael 5

就个人而言,我会选择第一种方法.如果你知道你需要/想要一个Fraction对象,为什么Bar不仅仅是那个?调用酒吧类的人需要理解的分数两种方式(通过你的整数),所以它只是清洁.

  • 如果分数是不可变的,我宁愿选择第一个.如果由于某种原因它不可能,我会像第二个例子一样复制. (2认同)

ass*_*ias 5

我将使用第一个并在fraction类中提供一个工厂方法,以便能够调用类似于:

new Bar(Fraction.of(4, 4));
Run Code Online (Sandbox Code Playgroud)

两全其美;-)