迁移到 Android Studio 时投射

Casting when migrating to Android Studio

我正在处理一个基于 Eclipse 的旧项目,并在 Android Studio 中打开它。最初使用 1.7 版构建,我现在使用 1.8 版,尝试过 1.7 版但没有成功。

我的主要问题是出现以下 3 个错误:

float size = (float) Float.parseFloat(v.getTag(R.string.size));

Error:

Error: Error:(228, 71) java: incompatible types: java.lang.Object cannot be converted to java.lang.String

代码: int pos = (int) v.getTag(R.string.pos);

Error: Error:(229, 49) java: incompatible types: java.lang.Object cannot be converted to int

Code:

int parentpos = (int) v.getTag(R.string.parentpos);

Error:

Error: Error:(234, 63) java: incompatible types: java.lang.Object cannot be converted to int

我知道它正在尝试将对象转换为整数。我尝试了几种可能的解决方案,但没有运气。代码中是否有任何我显然无法考虑的可能更改?

谢谢!

v.getTag(R.string.size) returns 一个 Object。它可以是任何对象。您需要将其显式转换为 String

float size = (float) Float.parseFloat((String)(v.getTag(R.string.size)));

第二个和第三个我觉得很奇怪。将 Object 转换为 int,应该首先转换为 Integer,然后在转换后的对象上调用 intValue()

顺便说一下,android 支持java 1.8

为了帮助您,完整的代码块,第一和第三被替换为:

public void onClick(View v) {
        String type = (String) v.getTag(R.string.type);
        float size = (float) Float.parseFloat((String)(v.getTag(R.string.size)));
        int pos = (int) v.getTag(R.string.pos);
        if (type.equals("white")) {
            // Play sound!
            Log.d("DEBUG", "White note, Size: " + size + ", Position (left to right): " + pos);
        } else if (type.equals("black")) {
            int parentpos = Integer.parseInt(v.getTag(R.string.parentpos).toString());
            // Play sound!
            Log.d("DEBUG", "Black note, Size: " + size + ", Parent Position (left to right): " + parentpos + ", Position (top to bottom): " + pos);

        }
    }