wei
08/29/2018, 2:37 AMA
that has an abstract member property defined by an interface:
interface Tool {
fun run(command: String): Boolean
}
abstract class A {
abstract protected var tool: Tool
fun execute(command: String) : Boolean {
return tool.run(command)
}
}
Then I have another class B
that inherits from A
and uses guice to inject the tool
member property at startup.
class B {
@Inject
@Transient
override protected var tool: Knife
}
where Knife
is a concrete class implementing the interface Tool
.
Intellij is complaining to me:
Var property tye is `Knife`, which is not a type of overridden protected abstract var tool: Tool defined in com.myorg....
.Andreas Sinz
08/29/2018, 7:37 AMvar
combined with using a subtype of Tool
, e.g. the following example fails:
val b = B()
val a: A = b
a.tool = Drill() //Fails at runtime, because B.tool must be a Knife, but Drill is used
You can use guice contructor injection and use a val
or set the type of B.tool
to Tool