我说假,因为该方法未被声明为抽象,但它没有实现。
我正在尝试修复使用BridJ引入的错误。 BridJ使用自定义注释来注释Android Activity中的方法。该方法具有以下特征:
@Library("example")
public static void helloLog(Pointer<Byte> logThis);
但编译器在这两行代码上抱怨Missing method body, or declare abstract
。所以我决定查看注释的源代码,即:
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR})
public @interface Library {
/**
* Name of this library.
*/
String value();
/**
* Names of libraries that need to be loaded before this library is loaded
*/
String[] dependencies() default {};
String versionPattern() default "";
}
在阅读Java Custom Annotations之后,我认为注释的定义没有任何问题。为此,我在helloLog()
方法中添加了一个实现。
public static void helloLog(Pointer<Byte> logThis) {}
之后错误就消失了。我没想到它会解决这个问题,但是FWIW,它允许我构建和运行,但它在启动时崩溃,因为我计划调查NullPointerException
。
更新1
@ thomas-kläger和其他人建议将native
关键字添加到helloLog
。我试过了,但后来我得到了这个运行时错误:
java.lang.UnsatisfiedLinkError: No implementation found for void connectedsolutions.cummins.com.bridjtest.MainActivity.helloLog(org.bridj.Pointer) (tried Java_connectedsolutions_cummins_com_bridjtest_MainActivity_helloLog and Java_connectedsolutions_cummins_com_bridjtest_MainActivity_helloLog__Lorg_bridj_Pointer_2)
我将更多地阅读文档和示例。感谢。