Просто добавление к исходному ответу. Хотя это будет работать:
MethodInfo method = typeof(Sample).GetMethod("GenericMethod");
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);
Также немного опасно, что вы теряете проверку времени компиляции для GenericMethod
. Если вы позже выполните рефакторинг и переименуете GenericMethod
, этот код не заметит и не будет работать во время выполнения. Кроме того, если есть какая-либо пост-обработка сборки (например, обфускация или удаление неиспользуемых методов / классов), этот код также может сломаться.
Итак, если вы знаете метод, с которым вы связываетесь во время компиляции , и это не называется миллионы раз, поэтому накладные расходы не имеют значения, я бы изменил этот код:
Action<> GenMethod = GenericMethod<int>; //change int by any base type
//accepted by GenericMethod
MethodInfo method = this.GetType().GetMethod(GenMethod.Method.Name);
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);
Хотя вы не очень красивы, у вас есть ссылка времени компиляции на GenericMethod
здесь, и если вы рефакторируете, удаляете или делаете что-либо с помощью GenericMethod
, этот код будет продолжать работать или, по крайней мере, ломаться во время компиляции (если, например, вы удалите GenericMethod
).
Другой способ сделать то же самое - создать новый класс-оболочку и создать его через Activator
. Я не знаю, есть ли лучший способ.
Вы хотите рассмотреть возможность использования сопрограмм Lua для каждого автономного агента вместо полностью отдельной виртуальной машины. Сопрограммы - более легкое решение, но могут подходить или не подходить для вашего приложения.
Если вы не можете изменить архитектуру, вы можете попробовать LuaJIT . Это может сделать инициализацию достаточно быстрой для ваших целей.
Дополнительные параметры:
Rings : «Rings - это библиотека, которая обеспечивает способ создания новых состояний Lua изнутри Lua. Это также предлагает простой способ связи между создателем (ведущим) и созданным (ведомым) состояниями. "
Плутон :" Все известные мультитач-жесты уже встроены и доступны так же просто. как прослушивание событий мыши (например: component.addGestureListener (..)). Он также имеет граф сцены с аппаратным ускорением, аналогичный JavaFX. Вы даже можете имитировать мультитач-ввод, подключив к своей машине одну или несколько мышей. Проверьте это на http://www.mt4j.org
Sparsh находится все еще в моих закладках с прошлого раза, когда я исследовал мультисенсорные решения Java.
, В то время как не столь прямой как типичный слушатель мыши или слушатель щелчка, это все еще обеспечивает разумный интерфейс.
Вам нужен Ваш слушающий класс для реализации sparshui.client.Client
, который требует processEvent
определение метода.
public void processEvent(int groupID, Event event) {
if(event instanceof TouchEvent) {
TouchEvent e = (TouchEvent)event;
if(e.getState() == TouchState.BIRTH) {
//do initial touch stuff
} else if(e.getState() == TouchState.MOVE) {
//do dragging stuff
}
}
else if(event instanceof DragEvent) {
DragEvent e = (DragEvent)event;
//do DragEvent specific stuff
} else if(event instanceof RotateEvent) {
RotateEvent e = (RotateEvent)event;
//do RotateEvent specific stuff
} else if(event instanceof ZoomEvent) {
ZoomEvent e = (ZoomEvent)event;
//do ZoomEvent specific stuff
}
//several other gesture types....
}
После этого, необходимо запустить сервер распознавания жеста, передающий в компоненте
new ServerConnection("localhost", objectImplementingClientInterface);
, Рассмотрение примеров кода на сайте должно дать Вам довольно хорошую идею платформы.
Как насчет этого: http://kenai.com/projects/macmultitouch