Guest User

Untitled

a guest
Jul 21st, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. public class ImpureToggle<T> implements Supplier<T> {
  2. //false represents state a, true represents state b
  3. private boolean state;
  4. private final T a;
  5. private final T b;
  6.  
  7. public ImpureToggle(T a, T b) {
  8. this.a = a;
  9. this.b = b;
  10. }
  11.  
  12. // returns a different reference depending on internal state
  13. @Override
  14. public T get() {
  15. return state ? b : a;
  16. }
  17.  
  18. public void toggle() {
  19. state = state ? false : true;
  20. }
  21. }
  22.  
  23. public class ConsumerToggle<T> implements Consumer<Consumer<T>> {
  24. private final T a;
  25. private final T b;
  26. //false represents state a, true represents state b
  27. private boolean state;
  28.  
  29. public ConsumerToggle(T a, T b) {
  30. this.a = a;
  31. this.b = b;
  32. }
  33.  
  34. @Override
  35. public void accept(Consumer<T> t) {
  36. t.accept(state ? b : a);
  37. }
  38.  
  39. public void toggle() {
  40. state = state ? false : true;
  41. }
  42. }
  43.  
  44. public interface ImpureStaticToggle {
  45. // reassigns parameter n
  46. static <T> void toggle(T state, T a, T b) {
  47. state = state == a ? b : a;
  48. }
  49. }
  50.  
  51. public interface PureStaticToggle {
  52. // returns a different reference depending exclusively on external input
  53. static <T> T toggle(boolean state, T a, T b) {
  54. //false represents state a, true represents state b
  55. return state ? b : a;
  56. }
  57. }
  58.  
  59. /*
  60. Just as an example of an unarguably bad implementation:
  61. */
  62. public class MutableToggle<T> implements Supplier<T> {
  63. private T state;
  64. private final T a;
  65. private final T b;
  66.  
  67. public MutableToggle(T a, T b) {
  68. state = a;
  69. this.a = a;
  70. this.b = b;
  71. }
  72.  
  73. // exposes a mutable reference, which could completely break the logic of this
  74. // object and others
  75. @Override
  76. public T get() {
  77. return state;
  78. }
  79.  
  80. public void toggle() {
  81. state = state == a ? b : a;
  82. }
  83. }
Add Comment
Please, Sign In to add comment