Cha*_*let 5 java inheritance dependency-injection
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);}
}
Run Code Online (Sandbox Code Playgroud)
如果我做 :
@Inject
Vehicle vehicle;
Run Code Online (Sandbox Code Playgroud)
@Inject知道要实例化哪个?AmbiguousResolutionException错误,我错了吗?我想这样做是为了避免出现此问题,并且还对参数进行了专门化,但是不允许这样做,而且我理解为什么。
class Car extends Vehicle
{
@Override
void collide(Car v){super.collide(v);}
}
class Truck extends Vehicle
{
@Override
void collide(Truck v){super.collide(v);}
}
Run Code Online (Sandbox Code Playgroud)
全部注入:
@Inject Instance<Vehicle> allVehicles; // see Instance docs on how to work with this
Run Code Online (Sandbox Code Playgroud)
以某种方式进行限定:您可以编写限定符注释来配合此操作,大致如下:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface Small {}
Run Code Online (Sandbox Code Playgroud)
...
@Small
class Car extends Vehicle { ... }
Run Code Online (Sandbox Code Playgroud)
...
@Inject @Small Vehicle thisWillBeACar;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1446 次 |
| 最近记录: |