我在与PHP有染了好几年后重新学习Java,我对PHP中使用的约定有疑问,以及如何在Java中实现类似的目标......
PHP
function getReport( $options = array() ) {
}
在上面的函数中,您将传递一个可选的关联数组,这些选项可能看起来像这样
Array(
from => "20110325",
to => "20110413",
subject_id => "2432",
...etc...
);
如果没有传递任何参数,它会在没有选项的情况下正常处理。
下面是我尝试在java中构建相同的函数,因为它是强类型的(在某些情况下非常令人耳目一新)我在构建时具有相同的灵活性。我考虑过使用Dictionary
,但不确定“最佳做法”是多少。
public TimeReport getTimeReport(Date from, Date to, int subjectId, int toDoItemId, int filterProjectId, int filterCompanyId) {
}
要使用一个/两个/无选项调用它,它会变得非常丑陋,参数为......
getTimeReport(null,null,null,234,null,null);
答案 0 :(得分:1)
你能用另一个用来表示调用getTimeReport函数所需参数的对象调用getTimeReport吗?
当你想要传递一个对象时,看起来像习惯将字符串传递给函数。
答案 1 :(得分:1)
这种灵活性并不是Java内置的,在我看来,这种语言不太适合它。你可以检查每个输入参数;如果为null,则将其设置为默认值。
为了更通用/说教,看起来你正在尝试某种类型的工厂(方法getTimeReport()属于哪个类?)。你想让TimeReport的构造函数处理这些选项吗?或者为不同的情况制作不同的TimeReport构造函数?
答案 2 :(得分:0)
通常,您会引入一个表示报告生成的配置参数的类,如TimeReportSpecification
或其他内容。
然后,您可以拥有静态工厂方法,为您提供TimeReportSpecification
的实例,例如withToDoItem
,以便获得:
getTimeReport(TimeReportSpecification.withToDoItem(234));