Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将扩展自同一抽象类的参数传递给函数_Java_Oop - Fatal编程技术网

Java 将扩展自同一抽象类的参数传递给函数

Java 将扩展自同一抽象类的参数传递给函数,java,oop,Java,Oop,我完成了一些练习,但我想优化一下。 我有两个名为“U1”和“U2”的类,它们都扩展了同一个名为“Rocket”的抽象类,我有两个名为“loadU1”和“loadU2”的函数,它们返回ArrayList(U1或U2),我想将其优化为一个函数,但没有成功。我尝试了泛型类型,但我不知道如何知道返回或转换到哪个类型。可能吗? 注意:我没有分享我尝试过的一些代码,因为我甚至不知道应该从哪里开始(JAVA新手) 这是课程的结构: public class U1 extends Rocket {} publ

我完成了一些练习,但我想优化一下。 我有两个名为“U1”和“U2”的类,它们都扩展了同一个名为“Rocket”的抽象类,我有两个名为“loadU1”和“loadU2”的函数,它们返回ArrayList(U1或U2),我想将其优化为一个函数,但没有成功。我尝试了泛型类型,但我不知道如何知道返回或转换到哪个类型。可能吗? 注意:我没有分享我尝试过的一些代码,因为我甚至不知道应该从哪里开始(JAVA新手)

这是课程的结构:

public class U1 extends Rocket {}

public class U2 extend Rocket {}

abstract class Rocket implements SpaceShip {}
这些是当前的功能:

public ArrayList<U1> loadU1(ArrayList<Item> items) {
    ArrayList<U1> u1Rockets = new ArrayList<>();

    return u1Rockets;
}

public ArrayList<U2> loadU2(ArrayList<Item> items) {
    ArrayList<U2> u2Rockets = new ArrayList<>();

    return u2Rockets;
}
public ArrayList loadU1(ArrayList项){
ArrayList u1Rockets=新的ArrayList();
返回U1锁;
}
公共ArrayList loadU2(ArrayList项){
ArrayList=新的ArrayList();
返回火箭;
}

也许您正在寻找这样的产品:

public <T extends Rocket> List<T> load(List<Item> items) {
    List<T> rockets = new ArrayList<>();

    return rockets;
}
公共列表加载(列表项){
List=new ArrayList();
返回火箭;
}

Try
list我不确定你想达到什么目的。如果两种方法从未使用过
arraylistitems
参数,那么在这两种方法中使用
arraylistitems
参数有什么意义?或者,如果立即返回局部变量的值,那么创建局部变量有什么意义?目前,这两个方法都可以重写为
{returnnewarraylist();}
。这里的主要目标是什么?它是否能够执行类似于
ArrayList u1ArrayList=loadRockets()的操作;ArrayList u2ArrayList=loadRockets()?如果是,为什么不编写
ArrayList u1ArrayList=new ArrayList();ArrayList u2ArrayList=新的ArrayList()?来自已接受答案的解决方案可以重写为
公共列表加载(){return new ArrayList();}
(因为它不使用
变量)。它可以像
List u1Rockets=load()那样使用但这实际上与编写
列表u1Rockets=newarraylist()相同这违背了使用这种方法的目的。IMO的问题需要更多的细节/清晰,以便有相同问题的人正确理解和发现(这是本网站的主要目标)。是的,我误解了这个问题。这是更好的选择。