gpt4 book ai didi

java - 注入(inject)与继承

转载 作者:搜寻专家 更新时间:2023-11-01 03:00:19 26 4
gpt4 key购买 nike

abstract class Vehicle
{
void collide(Vehicle v){}
}

class Car extends Vehicle
{
@Override
void collide(Vehicle v){super.collide(v);}
}

class Truck extends Vehicle
{
@Override
void collide(Vehicle v){super.collide(v);}
}

如果我这样做:

@Inject   
Vehicle vehicle;
  1. @Inject 如何知道要实例化哪一个?
  2. 我认为这会抛出一个 AmbiguousResolutionException,我错了吗?

我想这样做是为了避免这个问题,并且还特化了参数,但这是不允许的,我理解 why .

class Car extends Vehicle
{
@Override
void collide(Car v){super.collide(v);}
}

class Truck extends Vehicle
{
@Override
void collide(Truck v){super.collide(v);}
}
  1. 解决方法是什么?

最佳答案

  1. 它没有(见 2)
  2. 你说的很对,它有歧义,会抛出异常
  3. 基本上,您有以下可能性:

全部注入(inject):

@Inject Instance<Vehicle> allVehicles; // see Instance docs on how to work with this

以某种方式限定:你编写限定符注释来配合它,沿着:

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface Small {}

...

@Small
class Car extends Vehicle { ... }

...

@Inject @Small Vehicle thisWillBeACar;

关于java - 注入(inject)与继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com