Reputation: 7024
here is my scenario:
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!");
}
}
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[])
Upvotes: 4
Views: 336
Reputation: 17494
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
.
Upvotes: 2
Reputation: 2699
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!");
}
}
Upvotes: 5