fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.Objects;
  4. import java.util.logging.Level;
  5. import java.util.logging.Logger;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone {
  9. public static void main(String[] args) {
  10. ValueSwitcher<Integer> valueSwitcher = ValueSwitcher.getInstance();
  11. valueSwitcher.setValue1(1);
  12. valueSwitcher.setValue2(2);
  13. valueSwitcher.switchValues();
  14. System.out.println(String.format("value1: %s, value2: %s", valueSwitcher.getValue1(), valueSwitcher.getValue2()));
  15. }
  16. }
  17.  
  18.  
  19. class ValueSwitcher<T1> {
  20. private final static Logger LOGGER = Logger.getLogger("Value switcher");
  21. private T1 value1;
  22. private T1 value2;
  23.  
  24.  
  25. public static <T> ValueSwitcher<T> getInstance() {
  26. return new ValueSwitcher<>();
  27. }
  28.  
  29. protected ValueSwitcher() {
  30. LOGGER.entering(ValueSwitcher.class.getCanonicalName(), "ctor");
  31. LOGGER.entering(ValueSwitcher.class.getCanonicalName(), "ctor");
  32. }
  33.  
  34. public T1 getValue1() {
  35. LOGGER.entering(ValueSwitcher.class.getCanonicalName(), "getValue1");
  36. return value1;
  37. }
  38.  
  39. public void setValue1(T1 value1) {
  40. LOGGER.entering(ValueSwitcher.class.getCanonicalName(), "setValue1", value1);
  41. this.value1 = value1;
  42. LOGGER.exiting(ValueSwitcher.class.getCanonicalName(), "setValue1", value1);
  43. }
  44.  
  45. public T1 getValue2() {
  46. LOGGER.entering(ValueSwitcher.class.getCanonicalName(), "getValue2");
  47. return value2;
  48. }
  49.  
  50. public void setValue2(T1 value2) {
  51. LOGGER.entering(ValueSwitcher.class.getCanonicalName(), "setValue2", value2);
  52. this.value2 = value2;
  53. LOGGER.exiting(ValueSwitcher.class.getCanonicalName(), "setValue2", value2);
  54. }
  55.  
  56. @Override
  57. public boolean equals(Object o) {
  58. if (this == o) return true;
  59. if (o == null || getClass() != o.getClass()) return false;
  60. ValueSwitcher<?> that = (ValueSwitcher<?>) o;
  61. return Objects.equals(getValue1(), that.getValue1()) &&
  62. Objects.equals(getValue2(), that.getValue2());
  63. }
  64.  
  65. @Override
  66. public int hashCode() {
  67. return Objects.hash(getValue1(), getValue2());
  68. }
  69.  
  70. public void switchValues() {
  71. LOGGER.entering(ValueSwitcher.class.getCanonicalName(), "switchValues");
  72. T1 tmpValue = getValue1();
  73. setValue1(getValue2());
  74. setValue2(tmpValue);
  75. if (shouldLogInfo()) {
  76. LOGGER.log(Level.INFO, String.format("Values %s and %s has been switched", value1, value2));
  77. }
  78. LOGGER.exiting(ValueSwitcher.class.getCanonicalName(), "switchValues");
  79. }
  80.  
  81. private static boolean shouldLogInfo() {
  82. Level level = Logger.getGlobal().getLevel();
  83. return level != null && level.intValue() > Level.INFO.intValue();
  84. }
  85.  
  86. }
Success #stdin #stdout 0.13s 37900KB
stdin
Standard input is empty
stdout
value1: 2, value2: 1