当前位置: 首页 > 知识库问答 >
问题:

在ByteBuddy中实现两种方法、非getter setter接口的最惯用方法是什么?

司空鸿熙
2023-03-14

我有一个稍微奇怪的界面要使用ByteBuddy实现。假设它看起来像这样:

public interface Foo<T> {
  public T getBar();
  public void setBarSupplier(final BarSupplier supplier);
}

DynamicType中实现这个接口最惯用的方法是什么。建筑商?假设我已经定义了BarSupplier类型的private字段,并且:

  1. 我需要setBarSupply ier(BarSupply ier)的实现来设置这个字段和
  2. 我需要getBar()的实现来调用一些方法(让我们假装它是get())在存储在此字段中的BarSupply ier上并返回其结果

我知道截取(实现)方法,它采用(如您所见)单个实现。对于getter/setter对,这非常有效,因为您可以传入FieldAccess,并且FieldAccess将生成两个方法:getter和setter。(这不适用于我的情况:我需要两个截然不同的方法实现。)

我也知道简单地用defineMethod()手工定义方法,如果这是正确的方法,我准备这么做。

然而,我不确定以这种方式定义的方法是否与定义它们的接口缺乏某种必要的关联(事实上,implement返回一个对象,该对象有一个intercept方法,这让我认为这是正确实现接口的唯一方法)。我的动态类还会实现Foo吗


共有1个答案

斜成济
2023-03-14

您可以使用defineMethod,Byte Buddy会检测到覆盖,但实现接口然后使用可能更容易。方法(…) 匹配器,例如按名称。甚至可以匹配。方法(Foo.class.getMethod(…) 如果你想避免任何矛盾。

 类似资料:
  • 问题内容: 我有一个定义方法的接口。我有一个 实现 此接口的结构。在其中,我已经从该接口实现了方法,并且还定义了其他方法。 例如: 在操场上:https : //play.golang.org/p/B1GgoNToNl_l 在此,WagTail()不是Animal接口的一部分,但属于Dog结构。运行此代码会出现错误 dog.WagTail未定义(动物类型没有字段或方法WagTail)。 有没有一种

  • 让我们有一个简单的界面: 现在我这样创建代理: 当我执行测试时,我看到以下输出: 似乎我永远无法访问被调用方法的方法签名,如果它起源于接口,并且不是由超类实现的?! 当我调用我会看到,它也接受所有输入参数。 我错过了什么?我看了留档,但我仍然很困惑。 一般来说,我想创建,它捕获代理类中的所有方法,并处理以下情况: 执行一些操作,然后将调用传播到原始方法 做某事并返回它自己的结果,而不调用原始meh

  • 问题内容: 具有相同方法名称和签名的两个接口。但是由单个类实现,那么编译器将如何确定哪个方法用于哪个接口? 例如: 问题答案: 如果一个类型实现两个接口,并且每个接口定义一个具有相同签名的方法,则实际上只有一个方法,并且它们是不可区分的。例如,如果这两个方法的返回类型冲突,那么它将是编译错误。这是继承,方法重写,隐藏和声明的一般规则,并且不仅适用于两个继承的interface方法之间的可能冲突,还

  • 合并两个枚举实例的可选字段值的惯用方法是什么? 实例

  • 我是C#新手,我不明白编译器为什么不抱怨这段代码。以下是类的层次结构: 执行代码: 执行时<代码>---- 当决定调用什么函数时--运行时还是编译时?如果我弄脏了一个新的< code>class CAble : IAble怎么办?

  • Override Method可以实现接口方法也可以覆写父类的方法,但Implement Methods只能实现接口方法 操作步骤: 菜单栏: Code —> Implement Methods 快捷键: Mac: control + L Windows\/Linux: Ctrl + I