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