如何将字符串转换为另一种类型以在函数中使用

How to turn String into another Type to use in a Function

我有一个字符串来自网络。

该字符串匹配一个变量。 变量是 FrameLayout 类型。

我有一个用 FrameLayout 调用的函数。

如何获取接受传入字符串的函数

   @InjectView (R.id.printer45)
   FrameLayout printer_45;       

   public static final List<String> RED = Arrays.asList("printer_45")

   redLabelIcon(FrameLayout fL){

    ***create red icon***

   }

   String printer = data.getString("Printer")
   String status = data.getString("Status")

   **turn printer into frameLayout, somehow**

       if (RED.contains(status)){
           redLabelIcon(printer)
         }

我想做的是什么,以便我研究它。

您要实现的目标称为 映射:

Map<String, FrameLayout> mapping = new HashMap<>();
mapping.put("printer_45", printer_45);

以相同的方式,您可以在 String 类型的键下将任意数量的布局放入该地图。稍后您检索布局:

String printer = data.getString("Printer");
FrameLayout layout = mapping.get(printer);

你正在做的叫做 "mapping" - 例如,通常你会在哈希表中看到 "key" / "value" 对。或者您可以使用 Map 或使用 case 语句或 "else/if".

在你的例子中,List 对象没有 "key" 只有 "value" 所以它不起作用。您需要能够将像 "RED" 这样的 "key" 与像 "printer_45".

这样的值关联起来

如果您使用 Hashtable,则不要使用 "RED" 作为您的对象名称,使用 "printers" 之类的名称,然后将 "printer_45" 作为 "value" 和 "RED" 作为键。您也可以使用一个 Map 或两个 Arrays(一个 "key" 和一个 "value")或许多其他方式。

您可以使用 FactoryMethod 模式来获得

    public static FrameLayout getFrameLayout(String layoutName){
     if("layout1".equals(layoutName)){
      return FrameLayout1;
     }   else if (...){
     return FrameLayout2
     }
     ....
    }