https://github.com/mtumilowicz/java11-error-messages-using-enum
Simple implementation of handling error messages using enum.
https://github.com/mtumilowicz/java11-error-messages-using-enum
error-handling error-messages
Last synced: 11 days ago
JSON representation
Simple implementation of handling error messages using enum.
- Host: GitHub
- URL: https://github.com/mtumilowicz/java11-error-messages-using-enum
- Owner: mtumilowicz
- Created: 2019-01-21T18:32:57.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-01-25T20:48:58.000Z (over 7 years ago)
- Last Synced: 2025-10-25T20:17:53.434Z (9 months ago)
- Topics: error-handling, error-messages
- Language: Java
- Homepage:
- Size: 66.4 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://travis-ci.com/mtumilowicz/java11-error-messages-using-enum)
# java11-error-messages-using-enum
Simple implementation of handling error messages using enum.
# preface
Creating enum with error messages is very handy practice
when you try to write your code without exceptions (by
using `Either` for example). For `Either` basics you should refer
my other github repo: https://github.com/mtumilowicz/java11-vavr-either
# project description
* Suppose we have `Sender` class:
```
public class Sender {
public Either send(Order order) {
if (!order.isComplete()) {
return Either.left(OrderErrorMessages.INCOMPLETE.message);
}
return Either.right(new Send(order));
}
}
```
* when the order is complete - sends it
* when the order is incomplete - message
* We could model it in two different ways:
1. by throwing exception
1. by returning `Either`
In each case error messages stored in enum is a good approach
but when it comes to `Either` - it is very natural.
* error messages
```
public enum OrderErrorMessages {
INCOMPLETE("Order should be completed before sending it.");
public final String message;
OrderErrorMessages(String message) {
this.message = message;
}
}
```
* `Order` and `Send` are as simple as they can be:
```
@Value
class Send {
Order order;
}
@Value
@AllArgsConstructor(access = AccessLevel.PRIVATE)
class Order {
boolean complete;
static Order incomplete() {
return new Order(false);
}
static Order complete() {
return new Order(true);
}
}
```
**Shown approach with error messages encapsulated in enum
are much more cleaner than putting them in properties files
or literal strings.**
# tests
```
def "test send complete order"() {
given:
def sender = new Sender()
def order = Order.complete()
when:
def send = sender.send(order)
then:
send.isRight()
send.get().order == order
}
def "test send incomplete order"() {
given:
def sender = new Sender()
def order = Order.incomplete()
when:
def send = sender.send(order)
then:
send.isLeft()
send.getLeft() == "Order should be completed before sending it."
}
```