Java中的对象切换类型

时间:2018-10-16 07:29:41

标签: java

所以我想知道一种在Java中切换有效类型的简单方法,如下所示:

(我知道它不会编译,但是我需要此功能)

public void put(Object obj) {
    if (obj instanceof Integer) {

    } else if (obj instanceof String) {

    } else if (obj instanceof Boolean) {

    } else if (obj instanceof List<String>) {

    } else if (obj instanceof Map<String, String>) {

    }
}

4 个答案:

答案 0 :(得分:4)

简单的答案是:Java中没有开启“类型”。与Scala之类的语言相比,Java没有几乎不可思议的“模式匹配”功能。

当您确实需要这样做时:确定对象实例的特定类型,然后根据对象的真实性质执行不同的操作,例如if / else级联是少数选择之一。

一种替代方法是使用地图,例如Map<Class<?>, Consumer<?>)等。换句话说:您(预先)创建了一个知道方法的地图以调用不同的类,然后执行obj.getClass()以查看您的地图是否知道该类。但是该机制不是很健壮,因为它仅对类实例使用equals()

除此之外:只有很少的选择用例可以进行这种“类型切换”。通常,您可以通过后退一步,查看 real 潜在问题并设计完全不同的解决方案来解决此问题。

答案 1 :(得分:1)

您可以通过以下方式进行检查:

public void put(Object obj) {
    if (obj instanceof Integer) {

    } else if (obj instanceof String) {

    } else if (obj instanceof Boolean) {

    } else if (obj instanceof List) {
      List list = (List) obj;
      if(!list.isEmpty()){
        if(list.get(0) instanceof  String){
          List<String> listString=(List<String>)obj;
          //Do what  you want to do
        }
      }

    } else if (obj instanceof Map) {
      Map map = (Map) obj;
      if(!map.isEmpty()){
        Map.Entry entry = (Entry) map.entrySet().iterator().next();
        if(entry.getKey() instanceof String && entry.getValue() instanceof String){
          Map<String,String> mapStrind= (Map<String,String>)obj;
          //Do what  you want to do
        }
      }

    }
  }

答案 2 :(得分:0)

使用Object.getClass()。它返回对象的运行时类型。

答案 3 :(得分:-1)

否,没有内置函数。开关只能打开整数和字符串,唯一的其他结构是if

您可以尝试使用Class对象作为键的映射,因为对于每个对象,您都可以执行getClass()操作并获得代表其类的“令牌”。

更多坏消息:您永远无法在运行时中找到通用部分(因此您永远无法告诉List<String>中的List<Integer>),该信息不可用。