You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ByteBuddy:如何为接口生成Native修饰的实现方法?

解决方案

先纠正你代码里的关键问题,再给出完整实现:

  1. 方法匹配错误:你用ElementMatchers.named("foo")匹配方法,但接口的目标方法是value(),需要改成named("value")。
  2. Native方法生成逻辑:ByteBuddy生成native方法不需要普通的拦截逻辑,直接用Implementation.nativeMethod()即可,它会自动生成带native修饰符的空方法体。

另外,实现接口更规范的写法是implement(Foo.class)(subclass主要用于继承类),不过语法上两者都能运行。

完整代码如下:

final DynamicType.Unloaded<Foo> unloadedType = new ByteBuddy()
        .implement(Foo.class)
        .name("FooNative")
        .initializer(new LoadedTypeInitializer() {
            @Override
            public void onLoad(final Class<?> type) {
                System.loadLibrary("foo-native");
            }

            @Override
            public boolean isAlive() {
                return true;
            }
        })
        .method(ElementMatchers.named("value"))
        .intercept(Implementation.nativeMethod())
        .annotateMethod(Override.class) // ByteBuddy通常会自动生成该注解,可按需保留
        .make();

生成的类反编译后会得到你需要的代码:

public class FooNative implements Foo {
    static {
        System.loadLibrary("foo-native");
    }

    @Override
    public native int value();
}

内容的提问来源于stack exchange,提问作者andreoss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:45:33