diff --git a/0-0-intro/src/main/java/com/bobocode/intro/ExerciseIntroduction.java b/0-0-intro/src/main/java/com/bobocode/intro/ExerciseIntroduction.java
index 35d925636..0dd7818f2 100644
--- a/0-0-intro/src/main/java/com/bobocode/intro/ExerciseIntroduction.java
+++ b/0-0-intro/src/main/java/com/bobocode/intro/ExerciseIntroduction.java
@@ -1,45 +1,15 @@
package com.bobocode.intro;
-import com.bobocode.util.ExerciseNotCompletedException;
+import java.util.Base64;
+
-/**
- * Welcome! This is an introduction exercise that will show you a simple example of Bobocode exercises.
- *
- * JavaDoc is a way of communication with other devs. We use Java Docs in every exercise to define the task.
- * So PLEASE MAKE SURE you read the Java Docs carefully.
- *
- * Every exercise is covered with tests, see {@link ExerciseIntroductionTest}.
- *
- * In this repo you'll find dozens of exercises covering various fundamental topics.
- * They all have the same structure helping you to focus on practice and build strong skills!
- *
- * @author Taras Boychuk
- */
public class ExerciseIntroduction {
- /**
- * This method returns a very important message. If understood well, it can save you years of inefficient learning,
- * and unlock your potential!
- *
- * @return "The key to efficient learning is practice!"
- */
+
public String getWelcomeMessage() {
- // todo: implement a method and return a message according to javadoc
- throw new ExerciseNotCompletedException();
+ return "The key to efficient learning is practice!";
}
- /**
- * Method encodeMessage accepts one {@link String} parameter and returns encoded {@link String}.
- *
- * PLEASE NOTE THAT YOU WILL GET STUCK ON THIS METHOD INTENTIONALLY! ;)
- *
- * Every exercise has a completed solution that is stored in the branch "completed". So in case you got stuck
- * and don't know what to do, go check out completed solution.
- *
- * @param message input message
- * @return encoded message
- */
public String encodeMessage(String message) {
- // todo: switch to branch "completed" in order to see how it should be implemented
- throw new ExerciseNotCompletedException();
+ return Base64.getEncoder().encodeToString(message.getBytes());
}
-}
+}
\ No newline at end of file
diff --git a/1-0-java-basics/1-3-0-hello-generics/src/main/java/com/bobocode/basics/Box.java b/1-0-java-basics/1-3-0-hello-generics/src/main/java/com/bobocode/basics/Box.java
index 5a2d860ee..9560ce387 100644
--- a/1-0-java-basics/1-3-0-hello-generics/src/main/java/com/bobocode/basics/Box.java
+++ b/1-0-java-basics/1-3-0-hello-generics/src/main/java/com/bobocode/basics/Box.java
@@ -1,24 +1,18 @@
package com.bobocode.basics;
-/**
- * {@link Box} is a container class that can store a value of any given type. Using Object as a field type
- * is flexible, because we can store anything we want there. But it is not safe, because it requires runtime casting
- * and there is no guarantee that we know the type of the stored value.
- *
- * todo: refactor this class so it uses generic type "T" and run {@link com.bobocode.basics.BoxTest} to verify it
- */
-public class Box {
- private Object value;
- public Box(Object value) {
+public class Box {
+ private T value;
+
+ public Box(T value) {
this.value = value;
}
- public Object getValue() {
+ public T getValue() {
return value;
}
- public void setValue(Object value) {
+ public void setValue(T value) {
this.value = value;
}
-}
+}
\ No newline at end of file
diff --git a/1-0-java-basics/1-3-0-hello-generics/src/main/java/com/bobocode/basics/BoxDemoApp.java b/1-0-java-basics/1-3-0-hello-generics/src/main/java/com/bobocode/basics/BoxDemoApp.java
index bc12174ee..c2e05ab11 100644
--- a/1-0-java-basics/1-3-0-hello-generics/src/main/java/com/bobocode/basics/BoxDemoApp.java
+++ b/1-0-java-basics/1-3-0-hello-generics/src/main/java/com/bobocode/basics/BoxDemoApp.java
@@ -1,21 +1,14 @@
package com.bobocode.basics;
-/**
- * This demo demonstrates why using Object is not safe. It's not safe because runtime casting can cause runtime
- * exceptions. We should always fail as soon as possible. So in this code we should not allow setting String
- * value at compile time, if we expect to work with integers.
- *
- * todo: refactor class {@link Box} to make type parameterization safe and make this demo fail at compile time
- */
+
public class BoxDemoApp {
public static void main(String[] args) {
- Box intBox = new Box(123);
- Box intBox2 = new Box(321);
- System.out.println((int) intBox.getValue() + (int) intBox2.getValue());
+ Box intBox = new Box<>(123);
+ Box intBox2 = new Box<>(321);
+ System.out.println((int) intBox.getValue() + intBox2.getValue());
intBox.setValue(222);
- intBox.setValue("abc"); // this should not be allowed
- // the following code will compile, but will throw runtime exception
- System.out.println((int) intBox.getValue() + (int) intBox2.getValue());
+// intBox.setValue("abc"); // this should not be allowed
+ System.out.println((int) intBox.getValue() + intBox2.getValue());
}
}
diff --git a/1-0-java-basics/1-3-1-crazy-generics/src/main/java/com/bobocode/basics/CrazyGenerics.java b/1-0-java-basics/1-3-1-crazy-generics/src/main/java/com/bobocode/basics/CrazyGenerics.java
index 751d5899f..069a0bd6a 100644
--- a/1-0-java-basics/1-3-1-crazy-generics/src/main/java/com/bobocode/basics/CrazyGenerics.java
+++ b/1-0-java-basics/1-3-1-crazy-generics/src/main/java/com/bobocode/basics/CrazyGenerics.java
@@ -1,14 +1,12 @@
package com.bobocode.basics;
import com.bobocode.basics.util.BaseEntity;
-import com.bobocode.util.ExerciseNotCompletedException;
import lombok.Data;
+import lombok.val;
import java.io.Serializable;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Predicate;
/**
* {@link CrazyGenerics} is an exercise class. It consists of classes, interfaces and methods that should be updated
@@ -33,8 +31,8 @@ public class CrazyGenerics {
* @param – value type
*/
@Data
- public static class Sourced { // todo: refactor class to introduce type parameter and make value generic
- private Object value;
+ public static class Sourced { // todo: refactor class to introduce type parameter and make value generic
+ private T value;
private String source;
}
@@ -45,11 +43,11 @@ public static class Sourced { // todo: refactor class to introduce type paramete
* @param – actual, min and max type
*/
@Data
- public static class Limited {
+ public static class Limited {
// todo: refactor class to introduce type param bounded by number and make fields generic numbers
- private final Object actual;
- private final Object min;
- private final Object max;
+ private final T actual;
+ private final T min;
+ private final T max;
}
/**
@@ -59,8 +57,8 @@ public static class Limited {
* @param – source object type
* @param - converted result type
*/
- public interface Converter { // todo: introduce type parameters
- // todo: add convert method
+ public interface Converter { // todo: introduce type parameters
+ R convert(T obj); // todo: add convert method
}
/**
@@ -70,10 +68,10 @@ public interface Converter { // todo: introduce type parameters
*
* @param – value type
*/
- public static class MaxHolder { // todo: refactor class to make it generic
- private Object max;
+ public static class MaxHolder> { // todo: refactor class to make it generic
+ private T max;
- public MaxHolder(Object max) {
+ public MaxHolder(T max) {
this.max = max;
}
@@ -82,11 +80,13 @@ public MaxHolder(Object max) {
*
* @param val a new value
*/
- public void put(Object val) {
- throw new ExerciseNotCompletedException(); // todo: update parameter and implement the method
+ public void put(T val) {
+ if (val.compareTo(max) > 0 ){
+ max = val; // todo: update parameter and implement the method
+ }
}
- public Object getMax() {
+ public T getMax() {
return max;
}
}
@@ -97,8 +97,8 @@ public Object getMax() {
*
* @param – the type of objects that can be processed
*/
- interface StrictProcessor { // todo: make it generic
- void process(Object obj);
+ interface StrictProcessor> { // todo: make it generic
+ void process(T obj);
}
/**
@@ -108,10 +108,10 @@ interface StrictProcessor { // todo: make it generic
* @param – a type of the entity that should be a subclass of {@link BaseEntity}
* @param – a type of any collection
*/
- interface CollectionRepository { // todo: update interface according to the javadoc
- void save(Object entity);
+ interface CollectionRepository> { // todo: update interface according to the javadoc
+ void save(T entity);
- Collection