Я работаю над игровой системой. Пользователи могут отправлять файлы .class и .java для индивидуального поведения. Некоторые объекты доставляются пользователю через обратный вызов, но если пользователь может сам построить этот объект (с пользовательскими параметрами), это будет означать для него преимущество. Я откажусь от размышлений для пользователя и запечатаю свои пакеты. Я могу заставить это работать, если я откажусь от всей структуры пакета (и сделаю конструкторы package-private), но я бы не хотел этого делать.Разрешение строительства объекта только с некоторых пакетов
Вот пример:
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);
}
}
Мотивация: Имея все в одном пакете звучит неряшлив ...
Есть ли у кого-нибудь идеи о том, как это сделать без выравнивания t он упаковывает?
Заранее спасибо за любые решения, идеи или комментарии, Till
Как отказаться от структуры упаковки поможет вам это сделать? – Keppil
@ Keppil: Я мог бы сделать конструкторы private-package, построить их в пакете и передать их пользователю. – tilpner