Java关联数组作为方法的选项

时间:2011-03-14 04:16:46

标签: java php associative-array optional-parameters

我在与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);

3 个答案:

答案 0 :(得分:1)

你能用另一个用来表示调用getTimeReport函数所需参数的对象调用getTimeReport吗?

当你想要传递一个对象时,看起来像习惯将字符串传递给函数。

答案 1 :(得分:1)

这种灵活性并不是Java内置的,在我看来,这种语言不太适合它。你可以检查每个输入参数;如果为null,则将其设置为默认值。

为了更通用/说教,看起来你正在尝试某种类型的工厂(方法getTimeReport()属于哪个类?)。你想让TimeReport的构造函数处理这些选项吗?或者为不同的情况制作不同的TimeReport构造函数?

答案 2 :(得分:0)

通常,您会引入一个表示报告生成的配置参数的类,如TimeReportSpecification或其他内容。

然后,您可以拥有静态工厂方法,为您提供TimeReportSpecification的实例,例如withToDoItem,以便获得:

getTimeReport(TimeReportSpecification.withToDoItem(234));