gpt4 book ai didi

java - java中如何从一个方法返回不同类型的对象?

转载 作者:行者123 更新时间:2023-11-30 07:02:24 25 4
gpt4 key购买 nike

我想问一下java中单个方法如何返回不同类型的对象?

假设我们有一个“a”类。类 a 是类“b”和“c”的父类。假设我们有一个数组列表定义为:

java.util.ArrayList<a> list;

所以这个列表可以包含a类、b类和c类的对象。假设我们创建了一个 b 类对象和一个 c 类对象,并将它们添加到列表中。

现在,我想创建一个像这样的方法:

public ? get_element(boolean first)
{
if (first)
{
return list.get(0);
}
else
{
return list.get(1);
}
}

我的问题是,我不知道在“?”的地方放什么。在这个方法中。如果我输入“a”,那么“public a get_element”,当元素返回时,它始终是“a”类型,无论元素在添加时最初是“b”类型还是“c”类型。

但我希望返回的元素是添加的元素的类型。因此,如果我在列表的索引 0 处添加类型“b”的元素,并在索引 1 处添加类型“c”的元素,我希望当我调用 get_element 方法时,如果我提供等于“false”的参数,则返回元素的类型为“c”,如果我在调用它时提供 true,则返回的元素的类型为 b。

当然,我可以将返回的元素转换为我希望的类型。但这只是我写的简单例子,但我确实有更复杂的情况。我有大约 10 个类,它们都扩展一个类,并且数组列表可以包含这 11 种类型的对象中的任何一种,并且它们可以以任何方式排列,所以我不知道什么类型的元素在哪个位置,除非我创建一个代码,它将尝试一一转换为所有类型,直到找到可以转换的类型。

但我想知道,是否有某种更简单的方法可以做到这一点?

为了简化我的问题,我编写了这个 .java 文件:

public class test
{
public static class a{}
public static class b extends a{}
public static class c extends a{}
public static java.util.ArrayList<a> list = new java.util.ArrayList<a>(2);
static
{
b first_object = new b();
c second_object = new c();
list.add(first_object);
list.add(second_object);
b first_returned_object = get_element(true);
c second_returned_object = get_element(false);
}
public static ? get_element(boolean first)
{
if (first)
{
return list.get(0);
}
else
{
return list.get(1);
}
}
}

我的问题是我不知道在获取元素方法中的“get_element”之前要放什么。

我应该放置什么才能将类型 b 的对象保存在“first_returned_object”中,并将类型 c 的对象保存在“second_returned_object”中?

当然,这只是示例,我不会使用这些类,因为它们没有用,但我写这个是为了使我的问题尽可能简单。

我遇到此类问题的真实类(class)有 5000 多行,因此我无法在此处包含这些行,因此我编写了最简单的版本来演示我的问题。

有什么建议吗?

谢谢。

后记:致大写锁定仇恨者:您的仇恨在这里是双向的。 ;)

最佳答案

您可以使用泛型来使返回类型动态化。

试试这个:

public static <Type> Type get_element(int index)
{
String s = list.get(index).getClass().toString(); // returns "class class_name"
String[] split = s.split(" ");
Class<?> theClass = Class.forName(split[1]); // You need "class_name"

return (Type) theClass.cast(list.get(index));
}

或者简单地说:

public static <Type> Type get_element(int index)
{
return (Type) list.get(index);
}

关于java - java中如何从一个方法返回不同类型的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40689523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com