Java方法可以根据条件返回值吗?

2022-09-03 03:26:22

我有一个接口和类来实现这一点。ICoreClientAClientBClient

ICoreClient向用户公开。

我需要在接口中添加一个新方法。因此,它需要在两个客户端中实现。我不能使这种方法通用,因为它具有完全不同的签名但功能相似。ICoreClient

我有 2 个接口和xxyy

ClientA实现和实现xxClientByy

因此,我决定添加一个新的,它将为我提供客户端的实例或取决于客户端。testMethodICoreClientxxyy

我想根据条件从单个方法返回这些接口的实例。

客户端 A 中

public xx testMethod(){
  return instanceof xx;
}

客户端 B 中

public yy testMethod(){
  return instanceof yy;
}

我应该在ICoreClient界面中写些什么?

public zz testMethod()

我尝试将一个虚拟接口(充当通用超类型)放在两者中,并且正在实现这一点。但仍然无法在各自的客户端中公开方法,因为最终它在 中进行了类型转换。zzxxyyxxyyzz

对于这种情况,是否有任何已知的方法?

编辑:如果我做返回类型,这些接口的方法不会公开。虽然,对象包含 或 的实例,Objectxxyy

用户仍然需要将其转换为(或者用户如何知道?)以使用界面中的方法。我想暴露的方法,而不必强制转换为或...xxyyClientXClientAClientB


答案 1

编辑后,看起来您可能正在寻找泛型。你可以让你的界面像这样

interface ICoreClient<T>{// T will be set by each class implementing this interface
    T testMethod();
}

并且每个类都可以看起来像

class ClientA implements ICoreClient<xx>{
    xx testMethod(){
        //return xx
    }
}

class ClientB implements ICoreClient<yy>{
    yy testMethod(){
        //return yy
    }
}

答案 2

只有当 并且具有通用的超类型(接口或类)时才有可能。在最坏的情况下,您始终可以返回 Object。xxyy

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
}

推荐