【问题标题】:Cast a class in Java在 Java 中强制转换一个类
【发布时间】:2012-02-03 08:24:26
【问题描述】:

基本铸造应该是

MyClass mc = (MyClass)aClass

这很简单

但根据我的程序,直到运行时我才知道类名。

例如,类名可以是 interp_0, interp_1, interp_2, interp_3 .......#;

在 java 中有什么可以用来转换它的吗?

现在我得到的只是

类 afterCast = Class.forName("Interp_" + countState);

但我想要的是

("Interp_" + countState) afterCast

,不是

类后播

.

感谢所有帮助我的人。速度比我预想的要快。

【问题讨论】:

  • 你转换的变量是什么类型的?您不能声明该类型(因为您不知道),所以我看不出您想要做什么。可能最好的方法是为所有 Interp_* 类型定义一个公共子类类型并将其强制转换。

标签: java class syntax casting


【解决方案1】:

我建议使用由所有这些类实现的接口,其中包含您需要的方法。然后,您可以转换到此界面。我不明白为什么应该这样做不同,因为您知道您希望在那些实际上是接口的对象上使用哪些方法。

【讨论】:

  • 这是个好主意,我没有这样想。但这在我的演员阵容中不起作用。接口方法不能是静态的。我的方法必须
  • @user1187029 是的,但是你应该考虑方法不是静态的,因为很难以统一的方式处理不同类型的常用静态方法。但是,如果您需要按原样解决此问题,则可以使用反射。 Class<?> myClass.getMethod("methodName", argTypes),见docs.oracle.com/javase/6/docs/api/java/lang/Class.html
  • 感谢您的帮助。也许我处理这个问题的方式是错误的。我尝试构建一个愚蠢的 java 解释器。我会尝试使用javacompiler编译文件。
【解决方案2】:
Object something = "something";
String theType = "java.lang.String";
Class<?> theClass = Class.forName(theType);
Object obj = theClass.cast(something);

这似乎是一个类似的问题:java: how can i do dynamic casting of a variable from one type to another?

【讨论】:

  • 好的,这对您有什么好处?你仍然有一个对象。
【解决方案3】:

你要找的可能是这样的:

Class newClass = Class.forName("Interp_" + countState);
newClass.cast(yourObject);

但是,在编译时不知道实际类的情况下,无论如何,使用正确转换的值似乎没有任何意义,因为您无法表达任何特定的方法调用或字段引用在您的程序中没有特定的类。你确定你没有对其他事情感到困惑吗?您真正想要完成的是什么?

【讨论】:

  • 您的解决方案不起作用,第二个语句的结果类型仍然是 Object,我看不出如何使它以这种方式工作。
  • 没错。这就是我在下一段中所写的。但是,如果它与给定的类型不匹配,它确实会正确地给出 ClassCastException。 :)
  • 是的,但即使它可以工作,你仍然不能在代码中使用这个对象的方法,因为 cast 语句本身的返回值需要被强制转换为这个动态type 又是原来的问题。
  • 就像 Michael Schmeißer 说的,我不会使用方法
  • 它确实回答了直接的问题,即如何使用在运行时找到的类来反射性地转换给定的实例。如果问题只是一个 API 问题(考虑到一些意想不到的上下文,它可能是这样),那么寻求的答案就是我试图说明的 Class.cast 方法。然而,我接着指出上下文的明显问题,因此指出可能需要进行一些澄清。快乐的? :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 2017-01-03
  • 1970-01-01
  • 2010-10-03
  • 2022-06-10
  • 1970-01-01
相关资源
最近更新 更多