我正在设计一个API。它将有许多相同的方法,但是有一个不同的参数基元。
public void someMethod1(int x);
public void someMethod1(float x);
public void someMethod1(double x);
public void someMethod2(int x, int y);
...
public void someMethod3(int x, int y, int z);
...由于原语,我不得不复制和粘贴很多,我认为随着时间的推移,这是相当不可维护的。避免方法和构造函数中的原语是个好主意吗?例如,替换上述内容将是:
public <T extends Number> void someMethod1(T x);
public <T extends Number> void someMethod2(T x, T y);
public <T extends Number> void someMethod3(T x, T y, T z);编辑:
这有什么坏处?
发布于 2010-03-07 18:28:43
它将是可用的,因为在Java1.5和更高版本中使用了自动装箱/自动装箱。您可以将int传递给期望Integer的东西,反之亦然,转换将自动发生。这同样适用于返回值。
请记住,在您的方法的主体中,对于您的论点,您将只知道它们是某种形式的Number。只有在不区分整数和浮点表示的情况下,这才是合适的。
它不会提高你的表现对于大多数应用程序来说,差别将是微不足道的。
是否使用List而不是数组应该由您的设计来决定,但是通常情况下使用List是明智的,除非需要一个数组。List倾向于更灵活,不需要调整大小,具有Collections API的所有优点,等等。
发布于 2010-03-07 18:35:06
要回答您关于List<T>和T[]的问题,两者都公开了有关实现的详细信息。
List<T>比T[]更易于维护,因为您可以在不更改客户端代码的情况下更改列表实现。
如果客户端代码不应该修改列表,Iterable<T>会更好,因为除了迭代之外,您不会公开任何有关实现细节的内容,也不会阻止其他操作。
发布于 2010-03-07 18:32:37
API是关于语义的,所以我认为问题的答案是(我是否应该避免API设计中的原语),它取决于您的API做什么。
int addOne(int integer)在语义上是一致的,在维护方面不会出现太多问题,因为它反映了问题域。
Employee getEmployee(int empID)可能被归类为不适当的,如果员工ID更改为String,则会出现维护问题。
https://stackoverflow.com/questions/2397352
复制相似问题