I have an awkward requirement where I need to make sure that only one special method can be made public - Stable) Law inheritance can not be used from one other class.
An alternative to using StackTrace is as follows:
ClassA.java
package org .rnd.stack; Public class class A {Public Zero Law A () entered illegal manner illegally {Exception = False = New exception ("Fake-Ignor"); StackTrace Element [] Stack = Fake .getStackTrace (); StackTrace element st = stack [1]; If ("org.rnd.stack.ClassB" .equals (st.getClassName ()) & amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; methodbar; Is not allowed ");}}}
ClassB.java
package org.rnd.stack; public class ClassB {Public Null Method B (illegal) throws illegal IllegalAccessException {New class (). MethodA ();} Public illegal illegal method throws (IllegalAccessException {New class (.). MethodA ();} Public static zero main (string [] Args) {try {new classb (). MethodB ();} hold (IllegalAccessException e) {// TODO auto generated Holding block e.printStackTrace ();}}}
The above solution works fine, but due to quality control in code audit, I will come up with some other (or rather) better solution Is there a better way to achieve this?
The way is that you need to make an exception to get stacktrace, you can use thread methods Areas are.
StackTraceElement [] stack = Thread.currentThread (). GetStackTrace ();
In addition to this you want to use the class instead of writing the class. For example:
if (ClassB.class.getName (.) Equals (st.getClassName ()) and "methodB" .equals (st.getMethodName ()) {system .out.println ("You have permission to call"); } Other {Removing new illegal conclusions ("You are not allowed to call"); }
Apart from this, I do not know how you can do better without changing your argument or using heritage.
No comments:
Post a Comment