创建一个可以返回两个不同内容的方法

时间:2015-12-21 21:27:39

标签: java

我试图制作一个方法,可以根据输入的数据类型返回两个不同的东西。

此类将随机项更改为

的数据类型

这就是我所拥有的,我知道在这个方法中,允许返回的所有内容都是一个资源,但我不知道如何使它能够返回资源或垃圾。

public Resource itemToResourceOrJunk(randomItem d){
    Resource i;
    Junk O;
    i = d.getResource();
    O = d.getJunk();

    if(d.resourceName.equals("notassigned")){
        return o;
    }
    else if(d.junkName.equals("notassigned")){
        return i;
    }
}

4 个答案:

答案 0 :(得分:4)

您可以让ResourceJunk同时实现相同的接口(例如Stuff),然后将返回类型itemToResourceOrJunk作为该接口。

要明确,它可以这样:

public class Resource implements Stuff { ... }

public class Junk implements Stuff { ... }

然后

public Stuff itemToResourceOrJunk(randomItem d){ ... }

虽然如果您需要使用特定于 Resource Junk的方法或属性,,那么您需要必须转换为相关类型。

答案 1 :(得分:3)

让Resource和Junk实现一个接口并将其用作返回值。

所以

public class Resource implements ResourceOrJunk {
...
}

public class Junk implements ResourceOrJunk {
...
}

接口:

public interface ResourceOrJunk {
//can be left empty, or add some shared methods
}

现在您可以将方法更改为:

public ResourceOrJunk itemToResourceOrJunk(randomItem d){

并且调用方法可以检查结果:

ResourceOrJunk roj = itemToResourceOrJunk(d);
if (roj instanceof Resource){
    Resource r = (Resource)d;
    //do stuff with resource
} else {
    Junk j = (Jurk)d;
    //do stuff with junk
}

答案 2 :(得分:2)

您可以更改方法以返回对象:

public Object itemToResourceOrJunk(randomItem d){
    ...
}

然后调用者必须使用instanceof来确定实际返回的对象类型。

答案 3 :(得分:2)

使Resource和Junk实现相同的接口(或扩展相同的类),然后将其用作返回类型。