Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Hi so I have repetitive Code and want to get rid of it. I want to get rid of the scheduler call (scheduler.schedule(this::transition, 10, TimeUnit.SECONDS);) because its copy paste code. But I dont know how to put it in an Abstract Class so that it will be executed properly in every Stage. The "this::transition" makes it impossible for me.

public class Stage1 {
 private final ScheduledExecutorService scheduler  = Executors.newScheduledThreadPool(1);

public void transition() {
...
scheduler.schedule(this::transition, 10, TimeUnit.SECONDS);
  }
}

public class Stage2 {
 private final ScheduledExecutorService scheduler  = Executors.newScheduledThreadPool(1);

public void transition() {
...
scheduler.schedule(this::transition, 10, TimeUnit.SECONDS);
  }
}

public class Stage3 {
 private final ScheduledExecutorService scheduler  = Executors.newScheduledThreadPool(1);

public void transition() {
...
scheduler.schedule(this::transition, 10, TimeUnit.SECONDS);
  }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
1.6k views
Welcome To Ask or Share your Answers For Others

1 Answer

Extract the scheduling business logic to some outer class and inject this into your Stage classes - this scheduler should provide some schedule method with at least one parameter - the reference to the method that should be scheduled


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...