2015-03-21 2 views
-1

Прежде всего, если вопрос сформулирован неправильно. Дайте мне знать, я не был уверен, как сформулировать этот вопрос. ^^ 'Как передать объект в другой?

Хорошо, сейчас я работаю над API-интерфейсом плагина, чтобы люди могли изменять поведение программ, не изменяя исходный код, а пользователи, которые не могут программировать, но все же хотят его модифицировать, могут загружать другие плагины люди уже сделали. И прямо сейчас, я сейчас работаю над системой событий, где, если событие запущено, плагин может обнаружить, что на него реагируют. И я хочу, чтобы пользователь мог поместить этот код:

handleEvent(Event e) {} 

И затем использовать:

if(e instanceof <EVENTTYPE>) { 
    <EVENTTYPE> e2 = (<EVENTTYPE>) e; 
    // Do code here that could not be normally accessible without casting 
} 

Но я понятия не имею, как это сделать, так что у меня нет кода, чтобы показать. Но, если вам нужен код, который у меня есть, который отлично работает (кроме этого, о котором я сказал, я понятия не имею, как это сделать), я могу дать его вам.

+0

Обратите внимание, что вы не можете бросать объекты, а только ссылки (и примитивы). – immibis

+0

В чем вопрос? Вы спрашиваете, как реализовать механизм событий? – vojta

+0

Нет, у меня уже есть работа, я имею в виду, что хочу сделать так, если плагин прослушивает основной класс Event, а не конкретный, сделайте это, когда PluginManager выдает его всем прослушивающим модулям, я может сделать так, чтобы плагин мог использовать приведенный выше код и бросать объект Main event на определенное событие, если это тот, который был брошен. – Whirvis

ответ

1

Подклассы любого класса могут добавлять дополнительные методы к исходному классу. Если объектом, тип которого является этот подкласс, является ссылка переменной, тип которой является суперклассом, эти дополнительные методы не будут видны, потому что тип переменной не знает о них. Чтобы дополнительные методы стали доступными, объект должен быть привязан к переменной правильного типа, и для этого требуется downcast. Это то, что происходит в вашем примере.

+0

Да, я это знаю. Но я использую размышления, потому что это API, который используется плагинами на моем программном обеспечении для его расширения, а не API, который другие программные средства используют для расширения. Я спрашивал, как бы это сделать, когда мое программное обеспечение запускает событие для плагинов, на которое реагируют, если в событии есть подклассы, пользователи могут использовать его для этого, а затем использовать функции, которые обычно недоступны, если вы не прослушаете это специально. Но, спасибо за помощь! – Whirvis

+0

Извините, я не получил то, что вы просили –

+0

Его хорошо, я делаю это в реальном мире жизни: D – Whirvis

Смежные вопросы