0
我想重寫已分配給變量的類的方法。
例如:從指定的類覆蓋方法
inventory = new Inventory();
/* Some code here that changes how inventory
must behave or whatever */
inventory
{
@Override ...
}
我想重寫已分配給變量的類的方法。
例如:從指定的類覆蓋方法
inventory = new Inventory();
/* Some code here that changes how inventory
must behave or whatever */
inventory
{
@Override ...
}
也許你覺得這樣的事情(而不是空,如果你可以實現一個默認的策略,以使其更乾淨):
public interface Strategy {
public void doSomething();
}
public class Inventory {
Strategy strategy;
public Inventory() {
// ...
}
public void doSomething() {
if (strategy == null) {
System.out.println("strategy is empty");
} else {
strategy.doSomething();
}
}
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
}
那麼這
Inventory inventory = new Inventory();
inventory.doSomething();
inventory.setStrategy(new Strategy() {
@Override
public void doSomething() {
System.out.println("strategy is now something different");
}
});
inventory.doSomething();
表明這一點:
strategy is empty
strategy is now something different
對於更精細的版本你可以去看看strategy pattern。
組成肯定會在這裏幫助。而不是覆蓋的方法來改變Inventory
行爲,通過它的方法:如果你沒有使用Java 8
Inventory inv = new Inventory();
//...
inv.setMethod(() -> {
//write method here
});
:
class Inventory {
private MyMethod method;
public void setMethod(MyMethod method) {
this.method = method;
}
public void doSomething() {
method.doSomething();
}
}
interface MyMethod {
void doSomething();
}
您現在可以通過setMethod
切換的MyMethod
實施,你必須子類MyMethod
:
inv.setMethod(new MyMethod() {
public void doSomething() {
}
});
謝謝!甚至沒有想過這樣做:D – Sw3das