我有一个方法(称之为foo),如下所示:public void foo(String parm) 我知道有时需要一个整数,我将转换为一个字符串(不只是“”+ x,它比这更复杂,你只能通过查看int值来确定字符串值.int值将是用作索引。
现在我这样做:
public void foo(Object obj) {
if (obj instanceof String) {
...
} else if (obj instanceof Integer) {
...
} else // some sort of error
}
如果您执行以下操作,则不会在编译时捕获错误:
foo(new Date());
有没有办法可以在编译时捕获这个(除了制作两个单独的方法public void foo(Integer x)
和public void foo (String str)
?
答案 0 :(得分:4)
当然,构建重载版本的foo
:
foo(String obj)
foo(Integer obj)
删除一般的。如果必须,请让他们打电话给一般(private
)_foo(Object obj)
。
答案 1 :(得分:0)
我甚至会更进一步;你不仅应该有两个方法(一个采用字符串,一个采用整数)......你应该给这些方法两个不同的名称。
您想遵循SRP(单一责任原则)。代码中的任何元素(类,方法)都应该对“一件事”负责。
你的类和方法的名称应该非常清楚它们应该做什么。从这个意义上说,你有两个具有相同名称和不同参数的方法似乎很尴尬。因为,实质上,这两种方法会做不同的事情。所以 - 给他们说出他们真正做的事情。
答案 2 :(得分:0)
由于没有错误,它不会发现错误
您允许将对象作为参数传递,并且如您所知,所有对象都基于Object类,因此new Date()
是Object的实例。
我建议创建这两种方法,因为这样可以使代码更清晰。