Java:我可以将对象列表转换为字符串列表吗?反之亦然?

6

不通过遍历列表并转换对象,这是否可能?

如果可能,我还需要将 List<Object> 转换为 List<T>(其中 T = 预定义的 Object)?

编辑:为了澄清,我正在尝试使用 List<Object> 作为类方法的返回类型,该方法在我的代码中广泛使用。


根据你对“转换”的定义:较少破坏性的方法是将其转换为未经类型化的List。从那里,你可以将其转换为带有类型的List <?>,但它不会转换其中的对象。知道为什么要这样做会很好(通常失去类型安全性并不是一个好主意)。 - Viruzzo
@Viruzzo,我知道这不是最好的做法,但我正在尝试使用已经可用的代码,有时我用它来获取List<String[]>,有时是为了获取List<T>(其中T = 预定义对象)。 - dee
4个回答

9

实际上,这是可能的,因为有类型擦除。您可以将参数化类型转换为原始类型,反之亦然。

    List<Object> listO = new ArrayList<Object>( );
    listO.add( "Foo" );
    listO.add( "Bar" );

    List listQ = listO;
    List<String> listS = (List<String>) listQ;

然而,这并不意味着这是一个好主意。这种方法可以避开参数化类型的编译时类型检查。如果您的列表包含了您所期望的类型以外的对象,则可能会出现意想不到的结果。


6
不,这并不是一种有效的转换,因为并非所有的对象都是字符串数组String[]
你可以在两行代码中自己确定这一点。

编辑

听起来你需要更通用的方法。类似这样:

public <T> List<T> getGenericList()
{
    return new ArrayList<T>();
}

这可以返回一个像这样的List<String[]>
List<String[]> listOfStringArr = getGenericList();

2
是的,它给了我一个错误,这就是为什么我问这个问题的原因。也许有一种我不知道的方法可以解决它。 - dee
将其声明为 List<String[]> - Matt Ball
但它并不总是 List<String[]>,有时它是 List<T> - dee

0

不行。如果第一个列表中的Object实际上不是T怎么办?

话虽如此,您可以尝试将List<Object>强制转换为List<T>(准备好处理异常)。

/e1
我不知道您代码的具体情况,但是创建一个通用方法对您会有益处。


我以为我可以使用 instanceof - dee
1
@dee foo instanceof T 这种写法是不可能的,因为 foo 是一个 Object,而由于 类型擦除,无法确定 T 的具体类型。 - Jeffrey

0

按定义来说是不可能的。Java中的所有类都继承自Object。理论上,对象列表可以包含您想要的任何类型的元素。您如何将某些内容转换为特定的类型 T


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接