转换为未继承的类型

时间:2016-10-17 12:43:33

标签: java reflection casting

我有课可以说

public class Magic implements Serializable{
}

并且此类不继承

public class Amount{
}

有没有办法将Magic投射到Amount,我将不会访问任何字段,我只需要魔法“成为”金额?有什么办法吗?

4 个答案:

答案 0 :(得分:1)

不,没有。 Amount的实例与<{1}}的实例无关

即使两个类看起来相同,也是如此,在你的情况下它们肯定不是。

在这种情况下,您需要编写代码以将Magic转换为Magic。也许在Amount中有一个构造函数,它以Amount实例作为参数。

或者,如果Magic仅包含函数,请考虑将其重新命名为Amount,由interface实现。

答案 1 :(得分:1)

您无法在Java中的不相关类型之间进行转换。如果您需要从Amount实例创建Magic实例,您应该有一个接收这样一个参数的构造函数:

public class Amount {
    public Amount(Magic m) {
        // Initialize amount's fields...
    }
}

答案 2 :(得分:0)

Casting不会自动将对象从一种类型转换为另一种类型。

强制转换是一种禁用编译器类型检查的方法。演员唯一能做的就是告诉编译器:“这是一个对象,我知道这个对象是什么类型的,所以我希望你将它视为这种类型的对象,而不是抱怨”

在运行时仍会进行类型检查,如果此时对象确实不是您所说的类型,那么您将获得ClassCastException

强制转换无法自动将Magic对象转换为Amount对象。

您需要自己编写代码以使用Amount对象的数据创建Magic对象。

答案 3 :(得分:0)

Amount成为Magic的唯一方法就是让您的班级:Amount扩展is a班级。

您希望类之间有 List<String> matches = new ArrayList<>(); Pattern p = Pattern.compile("\"highlight\".*?\"name\": \\[\\s*\"(.*?)\"\\s*\\]", Pattern.DOTALL); Matcher m = p.matcher(json); while (m.find()) { matches.add(m.group(1)); } System.err.println(matches); 链接,这是通过继承完成的。

否则您将收到编译错误。