我试图制作一个方法,可以根据输入的数据类型返回两个不同的东西。
此类将随机项更改为
的数据类型这就是我所拥有的,我知道在这个方法中,允许返回的所有内容都是一个资源,但我不知道如何使它能够返回资源或垃圾。
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 :(得分:4)
您可以让Resource
和Junk
同时实现相同的接口(例如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实现相同的接口(或扩展相同的类),然后将其用作返回类型。