Я использую jni4net для доступа к коду Java из приложения C # и наоборот. jni4net использует отражение для генерации прокси-серверов JNI-кода, поэтому одно из ограничений состоит в том, что ваш код на Java и C # должен компилироваться для создания прокси.
К сожалению, это может привести к проблеме catch-22. Рассмотрим:
C # класс X использует класс Java Y
Java класс Y использует C # класс X
Ни один из них не может быть скомпилирован, поэтому хорошо зарекомендовавший себя способ состоит в том, чтобы взять один из классов (X или Y), разделить его до его чистой подписи и заставить его скомпилировать, а затем сгенерировать прокси из скомпилированного скелета. Затем вы можете заменить раздетый класс на оригинальный и продолжить свой веселый путь.
Это кажется мне отвратительным подходом, и я считаю, что должен быть лучший путь. Очевидным решением было бы сказать компилятору (или C #, или Java, на самом деле не имеет значения, какой) игнорировать ссылки на отсутствующий класс.
Возможно ли игнорирование ссылок на определенный отсутствующий класс для компиляторов C # или Java? Есть ли лучший способ сделать это (и нет, я не открыт для рассмотрения сокетов или чего-то подобного; мне требуется настоящее взаимодействие между .NET и Java)?
Пример кода был запрошен:
Пример кода с удаленным кодом моста jni4net для ясности. IA и IB - простые интерфейсы, также не включенные.
Java:
public class A implements IA
{
public void m1()
{
System.out.println("m1 called");
}
public static void main (String args[])
{
IB b = new B();
b.m2(new A());
}
}
C #:
public class B : IB
{
public void m2(IA a)
{
a.m1();
A a2 = new A();
a2.m1();
}
}