2015-12-21 62 views
3

即时通讯尝试做一个方法,可以返回两种不同的东西,基于馈入数据的类型。创建一个方法,可以返回两个不同的东西

此类改变随机项数据类型是

这就是我,我知道,在这个方法中,所有被允许返回是一种资源,但我不知道怎么样使其可以返回枯萎的资源或垃圾。

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; 
    } 
} 
+0

简单地返回对象不是很优雅。垃圾和资源之间是否存在任何关系或通用性,是否允许使用可返回的接口或基类? – MikeJ

+0

我会推荐'Resource'和'Junk'来扩展/实现一个共同的属性,然后只需'getData()' – Emz

+0

重新考虑这个方法的时候... – csmckelvey

回答

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 
} 
+0

我做了这个,现在它说资源不能转换为randomItem相同的垃圾不能转换为randomItem – Dan2567

+0

你在哪里投掷垃圾或资源randomItem?在我的例子中,我没有把它放在任何地方,你也没有。 – Wouter

+0

我把它放在一个袋类中,我希望能够同时容纳资源和垃圾 – Dan2567

2

你可以改变你的方法来返回对象:

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

然后调用者必须使用instanceof弄清楚实际返回什么类型的对象。

4

你可以同时拥有ResourceJunk实现相同的接口(比如Stuff),然后进行返回类型itemToResourceOrJunk是该接口。如果您需要使用特定的方法或属性

public class Resource implements Stuff { ... } 

public class Junk implements Stuff { ... } 

然后

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

虽然:

需要明确的是,它可以走这条路到ResourceJunk,然后你必须转换为相关类型。

2

使资源和垃圾实现相同的接口(或扩展相同的类),然后使用它作为返回类型。

相关问题