force base class to use its own method and not overrided method
here is my scenario:
class SomeBaseClass
{
public void foo(String str)
开发者_如何学Go {
.......
}
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!");
}
}
The logic is pretty simple. "SomeBaseClass" is 3rd party tool that i cannot modify. I want to limit its functionality and don't want to allow foo(String strs[]).
the problem is that inside SomeBaseClass foo(Sting str) internally calls foo(String strs[]). Hence when i call foo(String str) of MyClass, I get a runtime exception. How can I tell the SomeBaseClassclass to use SomeBaseClass::foo(String strs[]) and all other classes to use MyClass ::foo(String strs[])
Consider writing a wrapper
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!");
}
}
Perhaps over engg but inside MyClass.foo(String strs[])
you can check if the caller is SomeBaseClass.foo(String str)
, if yes, let the call go thru to super.foo(String)
else throw RuntimeException
.
To find the caller check StackTrace
.
精彩评论