mardi 4 août 2015

Backward compatibility for moved interfaces through different packages

I have interfaces:

package pl.some.app.package.one;

public interface Resolver<T extends Code> extends pl.some.app.package.two.Resolver {
}


package pl.some.app.package.two;

public interface Resolver<T extends Code> {
}

It's because 'one' was original, then it was moved to better package and in package one it stayed cause of backward compatibility. But it did not work for my ex co-workers and have a question now.

I'm using it in some old libraries like that:

import pl.some.app.package.one.Resolver;

public class Usage {
    new ObjectOne(Resolver<Code> resolver);
}

New API looks like:

import pl.some.app.package.two.Resolver;
public class ObjectOne {

    public ObjectOne(Resolver<Code> resolver){
        this.resolver = resolver;
    }

}

now I want to add another constructor to ObjectOne like that:

/**
* @deprecated use {@link #ObjectOne(Resolver<T>)} method
*/
@Deprecated
public ObjectOne(pl.some.app.package.one.Resolver<T> resolver){
    this.resolver = resolver;
}

but its usability may become lower, cause coder would think twice, what Resolver should he use, even if the first one is deprecated. Changing class Usage is no option. I need it to be compatible with two applications, where I use the old libraries and the new ones.

Aucun commentaire:

Enregistrer un commentaire