Может ли класс Java реализовать интерфейс C ++ - PullRequest
3 голосов
/ 14 апреля 2010

Возможно ли в классе Java реализовать интерфейс C ++ (интерфейс означает полный абстрактный класс)? Где я могу прочитать больше о?

Ответы [ 6 ]

2 голосов
/ 14 апреля 2010

Не напрямую, нет.Однако вы можете создать реализацию этого интерфейса на C ++, которая просто делегирует реализацию Java через JNI.Подробнее см. JNI .

2 голосов
/ 14 апреля 2010

Да, вы должны использовать JNI .

Вот учебник от Sun / Oracle

1 голос
/ 14 апреля 2010

Не в общем смысле, нет. Классы C ++ не существуют в скомпилированном двоичном файле в подавляющем большинстве случаев.

0 голосов
/ 02 марта 2011

Поддержка переопределения виртуальных методов C ++ запланирована в BridJ (альтернатива JNA, поддерживающая C ++), но пока нет.

Обновление: Начиная с версия 0.4 , BridJ поддерживает реализацию интерфейсов C ++ из Java :

Рассмотрим следующий класс C ++:

#ifndef TEST_EXPORTS
#define TEST_EXPORTS
#endif
class TEST_EXPORTS TestClass {
public:
    virtual int add(int a, int b);
};

Вы бы связали этот класс с Java с помощью следующих привязок BridJ:

public class TestClass extends CPPObject { 
    @Virtual(0) 
    public native int add(int a, int b); 
}; 

И можно было бы подклассифицировать ваш класс C ++ из Java очень естественно:

TestClass test = new TestClass() { 
    @Override 
    public int add(int a, int b) { 
        return a + b; 
    } 
}; 
0 голосов
/ 14 апреля 2010

Помимо JNI есть еще одна технология, названная JNA . Кажется, это проще (не нужно создавать заглушки C / C ++).

0 голосов
/ 14 апреля 2010

Класс Java может реализовывать интерфейс Java. Связь Java / C ++ осуществляется с использованием JNI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...