首页 > 解决方案 > 有没有办法通过使用字符串转换为类型

问题描述

我有一个字符串告诉我要将对象投射到什么位置,有没有办法投射到该对象?

这是一些定义我想做的伪代码


public TypeToCastTo Cast(T object, String TypeToCastTo) {
  switch (TypeToCastTo) {
   case "foo":
     return (foo)T;
   case "otherType":
     return (otherType)T;
   ...
  }
}

编辑
我想创建一个游戏,我可以单击一个按钮来购买一些东西,例如从 worldObject 继承的剑或盔甲。我想,因为我可能要返回一个武器或盔甲类(它们都继承自 worldObject),所以返回一个 worldObject 然后向下转换到正确的类(基于它的名称(字符串))是有意义的。

编辑 2:正如评论中提到的,这是一个 XY 问题。我最初试图创建一个返回向下转换类型的函数,但实际上这没有意义,因为如果它在其他地方使用,我将需要一个 switch 语句来确定如何处理该对象(在这一点上我可以投)所以而不是

public TypeToCastTo Cast(T object, String TypeToCastTo) {
  switch (TypeToCastTo) {
   case "foo":
     return (foo)T;
   ...
  }
}

并使用我的函数来投射 WorldObject,我可以拥有

Method DoingSomethingWithWorldObject(WorldObject T) {
 switch(T.typeToCastTo) {
  case "foo":
    foo temp = (foo)T;
    // code using temp
  case "other":
    other temp = (other)T;
    // code using temp
  ...
 }
}

尽管有几个人提到我想这样做的方式可能是错误的,包括我标记为正确的答案(即使我问错了问题,它也回答了我的问题),我真正理解这一点的原因是因为回应那被删除了。

标签: javacasting

解决方案


替代方法(虽然我不知道这是否被认为是不好的做法):

public TypeToCastTo Cast(T object, String TypeToCastTo) {
  switch (TypeToCastTo) {
   case "foo":
     return new Foo(object);
   case "otherType":
     return new OtherType(object);
   ...
  }
}

不过,对于您想要处理的不同类型,您将需要具有相应参数(重载)的特定构造函数。在这些构造函数中,您可以控制从一种类型到另一种类型的精确“翻译”。


推荐阅读