I'm new in Java, and I try to make type-safe money operation with generics.
For example, there is a function add, I want to be sure that I can't add dollars to euros, and that if I add dollars I'll get only dollars.
In my snippet, I don't know how to convert from BigDecimal to T type.
Could you please help me with that, or maybe to propose another design.
Thanks in advance
package com.company;
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
class Money extends BigDecimal{
public Money(int val) {
super(val);
}
}
class Euro extends Money {
public Euro(int val) {
super(val);
}
}
class Usd extends Money {
public Usd(int val) {
super(val);
}
}
class Operation{
public <T extends Money> T add(T a, T b){
return (T) a.add(b);
}
}
Operation operation = new Operation();
Usd usdResult = operation.add(new Usd(5), new Usd(5));
Euro euroResult = operation.add(new Euro(5), new Euro(5));
System.out.println(usdResult);
System.out.println(euroResult);
}
}