java内部类私有构造函数,公共成员
我想知道这是否是设计类的首选方式;如果没有,它有什么问题,还有什么更好的选择java内部类私有构造函数,公共成员,java,inner-classes,public-method,Java,Inner Classes,Public Method,我想知道这是否是设计类的首选方式;如果没有,它有什么问题,还有什么更好的选择 class Calculator { public Calculator(Input input) {...}; CalculatorOutput output; class CalculatorOutput { private CalculatorOutput() {} //private constructor - so no one other than Calculator can
class Calculator {
public Calculator(Input input) {...};
CalculatorOutput output;
class CalculatorOutput {
private CalculatorOutput() {} //private constructor - so no one other than Calculator can instantiate this class
Double someCalcStuff;
List<Double> someOtherCalcStuff;
}
public void calculate() {
CalculatorOutput op = new CalculatorOutput();
//..after this function populates the someCalcStuff & someOtherCalcStuff; it just returns an instance of CalculatorOutput
}
...
return op;
}
//usage
Calculator.CalculatorOutput result = new Calculator(input).calculate();
for (Double d: result.someOtherCalcStuff) {...}
类计算器{
公共计算器(输入){…};
计算器输出;
类计算器输出{
private CalculatorOutput(){}//private构造函数-所以除了Calculator之外没有人可以实例化这个类
双倍体细胞微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体微粒体;
列出一些其他的CalcStuff;
}
公共空间计算(){
CalculatorOutput op=新的CalculatorOutput();
//…此函数填充someCalcStuff&someOtherCalcStuff;后,它只返回CalculatorOutput的一个实例
}
...
返回op;
}
//用法
Calculator.Calculator输出结果=新计算器(输入).Calculator();
for(双d:result.someOtherCalcStuff){…}
我之所以将CalculatorOutput作为Calculator的一个内部类,是因为b/c除了返回计算器的输出外,它没有其他用途或上下文。我将CalculatorOutput的成员作为公共b/c,我真的不认为有必要将其私有化,然后通过getter/setter进行访问……因为我不希望继承这个内部类,也不希望执行本文中提到的任何其他功能:
用户无法实例化内部类(私有构造函数),因此我看不到创建内部类(CalculatorOutput)的公共可访问成员的真正缺点
具体问题:
- 这种方法不好吗?为什么?李>
- 实现这一目标的更好方法是什么
类计算器{
专用计算器输出;
公共计算器(输入){/*逻辑在此*/}
//接球手和接球手
}
类计算器输出{
私人双人房;
私有列表someOtherCalcStuff;
//接球手和接球手
计算器输出(){}
}
公开课考试{
公共静态void main(字符串[]args)
{
计算器计算器=新计算器();
CalculatorOutput输出=新的CalculatorOutput();
//根据需要使用方法
}
}
我认为根本不需要内部类为了避免Calculator类中有CalculatorOutput,您可以声明CalculatorOutput而不具有访问权限(例如,类CalculatorOutput{}),并且将Calculator和CalculatorOutput放在同一个包中。那么只有包中的类才能访问CalculatorOutput。我说的是Java中的访问级别。您可以在这里阅读更多内容:我认为这个问题更适合codereview.stackexchange.com。请看下面的图片。你可能会在那里得到更多有用的反馈。@Erick:我知道软件包保护是另一种选择。。谢谢…@DaoWen:有没有办法将此“交叉发布”到stackexchange codereview(并可能从此处关闭此帖子?)谢谢
class Calculator {
private CalculatorOutput output;
public Calculator(Input input) {/* logic here */}
// getters and setters
}
class CalculatorOutput {
private Double someCalcStuff;
private List<Double> someOtherCalcStuff;
// getters and setters
CalculatorOutput() {}
}
public class Test{
public static void main(String [] args)
{
Calculator calc = new Calculator();
CalculatorOutput output = new CalculatorOutput();
// use methods as needed
}
}