I have a POJO that returns some value, but now that value could be of a different type:
public class ContainerA {
    String value;
    public ContainerA(String value) {
       this.value = value;
    }
    public String getValue() {
       return value;
    }
    //some more methods
}
So I wanted to just replace it with this other one, but the refactoring effort would be just too great:
public class ContainerA<T> {
    T value;
    public ContainerA(T value) {
       this.value = value;
    }
    public T getValue() {
       return value;
    }
    //some more methods
}
And to avoid that large refactoring I was thinking that I could have something like this:
public interface Container<T> {
    public T getValue() {
    //some more methods
}
public class ContainerA implements Container<String> {
    String value;
    public ContainerA(String value) {
       this.value = value;
    }
    public String getValue() {
       return value;
    }
    //implementation of those other methods
}
But since most of those POJO classes will look pretty much the same and there are a bunch of other methods, so I was wondering why this would be problematic:
public class Container<T> {
    T value;
    public Container(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
    //some other methods
}
public class ContainerA extends Container<String> {
    public ContainerA(String value) {
       super(value);
    }
}
Again, the idea is to add generics support and avoid the large refactor. Is there a better approach? is any of the above ok? why?
 
     
     
    