![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| oson |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
Подскажите пожалуйста есть ли средство определить откуда происходит вызов метода - из соседнего в том же jar класса или извне этого jara?
Это нужно для ограничений некоторых функций без лицензии. То есть внутри jar есть класс InnerClass с методом InnerMethod, который может вызывать и соседний в этом же jare класс, и класс клиента извне jara. Надо, чтобы класс InnerClass имел возможность распознать, откуда извне или изнутри jara пришел вызов и в зависимости от этого выполнить так или иначе метод InnerMethod. Есть такие возможности в Java? |
|||
|
||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
думаю достаточно сравнить объекты *.class. У классов с разных пакетов они будут разные.
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Можно создать Exception и у него получить call stack. Можно запросить у ClassLoader getResource() и так можно определить откуда загружен тот или иной класс.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
Вообще в проекте не может быть двух классов с двумя одинаковыми именами и одинаковыми пакетами. Чем то они должны отличаться. А если они отличаются, то это уже разные типы.
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Может. 2. Это вообще не упоминалось в условии. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
извиняюсь, не правильно понял вопрос. Тогда предлагаю Thread.currentThread().getStackTrace(). Хотя определять лицензию таким образом мне кажется странным.
LSD, а как может? Можно пример вызова двух классов с одинаковыми именамии и пакетами, но разными classpath в одном методе? Это сообщение отредактировал(а) priam220 - 5.4.2012, 18:14 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Как минимум один надо будет вызывать через рефлексию. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| oson |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
Если 2 одинаковых класса нельзя установить в один classpath, то можно просто проверять полное имя класса, который вызывает метод? Как получить в методе имя вызывающего класса? Это сообщение отредактировал(а) oson - 9.4.2012, 17:52 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Можно. 2. Java всегда оперирует именно полным именем класса, имя без пакаджа существует только во время компиляции. А дальше разматываешь стек и смотришь откуда пришел вызов. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| oson |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
А каким же способом можно 2 класса с одинаковыми именами иметь в одном проекте?
И что показывает метод boolean isNativeMethod() класса StackTraceElement? Это сообщение отредактировал(а) oson - 9.4.2012, 22:30 |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Можно иметь сколько угодно классов с одинаковыми именами в CLASSPATH, никто не запрещает. Но использоваться будет только один. 2. Если использовать сторонние ClassLoader-ы то можно и загрузить несколько разных классов с одним и тем же именем (это обычная ситуация для серверов приложений):
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| oson |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 3.3.2004 Где: Севастополь Репутация: нет Всего: 1 |
Спасибо.
А что такое sealed package http://docs.oracle.com/javase/tutorial/dep...ar/sealman.html Я что-то не совсем понял суть? Это как то связано с внутренними и внешними вызовами методов в пределах jara? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Это запрет на загрузку классов расположенных в неком package из мест отличных от этого jar-а. Смысл состоит в том, чтобы нельзя было создать свой класс в том же package и вызвать package private методы. В твоем случае надо сделать две версии метода, одну публичную другую package private. Только Sealed очень просто убирается правкой манифеста, поэтому надо подписывать jar и проверять подпись при запуске. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |