我在一个类似游戏的系统上工作。用户可以提交 .class 和 .java 文件来定制行为。有些对象通过回调传递给用户,但如果用户可以自己构造这些对象(使用自定义参数),这对他来说意味着优势。我将不允许用户反射并密封我的包裹。如果我放弃所有包结构(并使构造函数包私有),我可以让它工作,但我不想这样做。
这是一个例子:
sscce.mycode.a.SomeClass.java:
package sscce.mycode.a;
import sscce.mycode.b.RestrictedObject;
import sscce.usercode.SomeUserClass;
public class SomeClass {
public static void main(String[] args) {
SomeUserClass userClass=new SomeUserClass();
// If I can create it from here, anyone can...
RestrictedObject object=new RestrictedObject();
userClass.someMethod(object);
}
}
sscce.mycode.b.Interface.java:
package sscce.mycode.b;
public interface Interface {
public void someMethod(RestrictedObject restrictedObject);
}
sscce.mycode.b.RestrictedObject.java:
package sscce.mycode.b;
public class RestrictedObject {
public RestrictedObject() {}
}
sscce.usercode.SomeUserClass.java:
package sscce.usercode;
import sscce.mycode.b.Interface;
import sscce.mycode.b.RestrictedObject;
public class SomeUserClass implements Interface {
@Override
public void someMethod(RestrictedObject restrictedObject) {
// It receives an instance, but cannot create it.
System.out.println("Got "+restrictedObject);
}
}
动机:把所有东西都放在一个包里听起来很乱……
有没有人知道如何在不压扁包装的情况下做到这一点?
提前感谢任何解决方案、想法或评论,直到