这是我的情景:
class SomeBaseClass
{
public void foo(String str)
{
.......
}
public void foo(String strs[])
{
.......
}
}
class MyClass extends SomeBaseClass
{
public void foo(String str)
{
super.foo(str);
}
public void foo(String strs[])
{
throw new RuntimeException("only one input please!");
}
}
逻辑非常简单。 “SomeBaseClass”是我无法修改的第三方工具。我想限制它的功能,不想允许foo(String strs [])。
问题是SomeBaseClass里面的foo(Sting str)内部调用foo(String strs [])。因此,当我调用MyClass的foo(String str)时,我得到一个运行时异常。如何告诉SomeBaseClassclass使用SomeBaseClass :: foo(String strs [])和所有其他类来使用MyClass :: foo(String strs [])
答案 0 :(得分:5)
考虑编写包装器
class MyClass extends SomeBaseClass
{
private SomeBaseClass impl = new SomeBaseClass ();
public void foo(String str)
{
impl.foo(str);
}
public void foo(String strs[])
{
throw new RuntimeException("only one input please!");
}
}
答案 1 :(得分:2)
也许过度参与,但在MyClass.foo(String strs[])
内,您可以检查来电者是否为SomeBaseClass.foo(String str)
,如果是,请将来电转至super.foo(String)
其他throw RuntimeException
。
要查找来电显示StackTrace
。