force base class使用自己的方法而不是覆盖方法

这是我的情景:

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”是我无法修改的第三方工具。 我想限制它的function,不想允许foo(String strs [])。

问题是在SomeBaseClass里面foo(Sting str)内部调用foo(String strs [])。 因此,当我调用MyClass的foo(String str)时,我得到一个运行时exception。 如何告诉SomeBaseClassclass使用SomeBaseClass :: foo(String strs [])和所有其他类来使用MyClass :: foo(String strs [])

也许在engg但是在MyClass.foo(String strs[])你可以检查调用者是否是SomeBaseClass.foo(String str) ,如果是,让调用直到super.foo(String)否则throw RuntimeException

要查找调用者,请检查StackTrace

考虑编写一个包装器

 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!"); } }