在Java

时间:2016-04-22 13:13:50

标签: java object

我有一个方法(称之为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)

3 个答案:

答案 0 :(得分:4)

当然,构建重载版本的foo

foo(String obj)

foo(Integer obj)

删除一般的。如果必须,请让他们打电话给一般(private_foo(Object obj)

答案 1 :(得分:0)

我甚至会更进一步;你不仅应该有两个方法(一个采用字符串,一个采用整数)......你应该给这些方法两个不同的名称。

您想遵循SRP(单一责任原则)。代码中的任何元素(类,方法)都应该对“一件事”负责。

你的类和方法的名称应该非常清楚它们应该做什么。从这个意义上说,你有两个具有相同名称和不同参数的方法似乎很尴尬。因为,实质上,这两种方法会做不同的事情。所以 - 给他们说出他们真正做的事情。

答案 2 :(得分:0)

由于没有错误,它不会发现错误 您允许将对象作为参数传递,并且如您所知,所有对象都基于Object类,因此new Date()是Object的实例。
我建议创建这两种方法,因为这样可以使代码更清晰。