我定义了这个方法:
public static TreeSet<ItemStack> getItems() {
TreeSet<ItemStack> things = new TreeSet<>();
things.add(new ItemStack(Material.ACACIA_DOOR));
return things;
}
我也尝试在TreeSet中放置多个东西,它也不起作用。
现在我有了这个代码部分:
TreeSet<ItemStack> things = getItems();
如果我这样做,没有任何反应。如果我用try / catch包围它,似乎抛出异常。 但是,如果我打印出错误:
} catch (Exception exc) {
System.out.println("Catched an exception:")
exc.printStackTrace();
System.out.println(exc.getMessage());
System.out.println(exc);
}
没有任何错误/ Stacktrace即将发生。它只是说:
[INFO]: Catched an exception:
[WARN]: java.lang.ClassCastException
[INFO]: null
[INFO]: java.lang.ClassCastException
那么错误是什么,我如何防止它,为什么我通过使用ItemSets将带有ItemSet的TreeSet强制转换为TreeSet来获得它?
答案 0 :(得分:1)
您可以做些什么来解决您的情况,从而保证您的预期行为是使用普通列表而不是TreeSet来存储您的项目:
@Override
protected void onPause() {
super.onPause();
camera.stopPreview();
camera.release();
//camera = null; //this give me a null object message
}
@Override
protected void onResume() {
super.onResume();
camera = Camera.open(cameraId);
setCameraDisplayOrientation();
startCameraPreview(surfaceHolder, surfaceView.getWidth(), surfaceView.getHeight());
}
通过这种方式,您可以解决问题。如果你想在你的物品上使用某个ordain,那么应该使用Treeset,并且无法正常订购ItemStack。
答案 1 :(得分:0)
即使您不知道自己在寻找什么,也请点击Ctrl-f
,然后在页面中查找ClassCastException
。在您正在使用的构造函数的文档TreeSet()
中,您将找到:
插入集合中的所有元素都必须实现
Comparable
接口。 ...如果用户尝试向该组添加违反此约束的元素...,则添加调用将抛出ClassCastException
。
所以,要么:
ItemStack
工具Comparable<ItemStack>
。Comparator<ItemStack>
。TreeSet