我正在尝试创建一个返回一个数组的方法,该数组包含所有MediaItem的String表示形式,其作者与传入的targetAuthor匹配。该数组不能包含任何null值。如果不匹配,则该方法返回长度为0的数组。 这是我的代码
Parse
...
private ArrayList<MediaItem> itemList;
public MediaList(){
itemList = new ArrayList<MediaItem>();
}
这是正在运行的测试
public String[] getAllItemsByAuthor(String targetAuthor){
Object tempArray[] = itemList.toArray();
String targetAuthorArray[] = new String[tempArray.length];
for (int i = 0; i < tempArray.length; i++){
targetAuthorArray[i] = (String)tempArray[i];
}
int index = 0;
for (String value : targetAuthorArray){
if (Arrays.asList(targetAuthorArray).contains(targetAuthor)) {
targetAuthorArray[index] = String.valueOf(value);
}
}
return targetAuthorArray;
}
此测试运行时弹出错误
@Test
public void getItemsByAuthorZeroMatchesTest() {
createListForTesting(mediaList);
String[] items = mediaList.getAllItemsByAuthor("No Author Matches This");
assertEquals("Test 36: Test the getAllItemsByAuthor method with zero matches.", 0, items.length);
}
我还有另一种方法可以做同样的事情。应该返回一个新数组,该数组包含其标题与传递的targetTitle匹配的所有MediaItem的String表示形式。应该使用其toString()方法,并且不能返回任何空值
这是我的代码
java.lang.ClassCastException: class Song cannot be cast to class java.lang.String (Song is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')
我没有使用toString方法,因为我不知道在哪里合并它,但这是它的代码
public String[] getAllItemsByTitle(String targetTitle){
String targetTitleArray[] = new String[itemList.size()];
int index = 0;
for (MediaItem value : itemList){
if (Arrays.asList(itemList).contains(targetTitle)) {
targetTitleArray[index] = String.valueOf(value);
}
}
return targetTitleArray;
}
运行getAllItemsByTitle时,它应该返回两个匹配项,但返回每个项目。
答案 0 :(得分:0)
targetAuthorArray[i] = (String)tempArray[i];
您的tempArray
数组似乎包含Song对象(您知道您也可以执行Song[] array = new Song[size]
,对吗?)。
Song
无法转换为String
。这样想吧:
int i = "ABCD";
它显然不起作用。相反,请执行以下操作:
tempArray[i].toString();
但是随后您遇到了这个问题,在那里也可以解决。 How do I print my Java object without getting "SomeType@2f92e0f4"?