I have a ICoreClient interface and AClient and BClient classes implements this.
ICoreClient is exposed for users. 
I need to add a new method in ICoreClient interface. So, it needs to be implemented in both clients. I can not make this method generic as it has completely different signature but similar functionalities. 
I have 2 interfaces xx and yy
ClientA implements xx and ClientB implements yy
So, I decided to add a new testMethod in ICoreClient that will provide me the instance of xx or yy depending upon clients.
I want to return the instance of these interfaces from a single method depending upon condition.
In ClientA:
public xx testMethod(){
  return instanceof xx;
}
In ClientB:
public yy testMethod(){
  return instanceof yy;
}
What should I write in ICoreClient interface?
public zz testMethod()
I tried putting a dummy interface zz (acting as a common supertype) both xx and yy are implementing this. But still not able to expose methods of xx and yy in their respective clients as finally it got typecasted in zz.
Is there any known approach for this kind of scenario?
Edit: If I make return type Object, method of these interfaces are not exposed. Although, Object contains the instance of xx or yy, 
User still needs to cast it to (xx or yy how will user know?) for using the methods in the interface.. I want to expose the methods of the ClientX without having to cast to ClientA or ClientB...
After your edit it looks like you may be looking for generics. You can make your interface like this
interface ICoreClient<T>{// T will be set by each class implementing this interface
    T testMethod();
}
and each of your classes can look like
class ClientA implements ICoreClient<xx>{
    xx testMethod(){
        //return xx
    }
}
class ClientB implements ICoreClient<yy>{
    yy testMethod(){
        //return yy
    }
}
                        It is possible only if xx and yy have a common super type (interface or class). At the worst case, you can always return Object.
public Object testMethod () // or a more specific common super type of `xx` and `yy`
{    
    if (..some condition..) {
        return ..instanceof `xx`..;
    } else if (..other condition..) {
        return ..instanceof `yy`..;
    }
    return null; // or some other default instnace
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With