【问题标题】:random value in java depending on field typejava中的随机值取决于字段类型
【发布时间】:2011-07-01 01:11:18
【问题描述】:

有没有办法根据字段类型获取随机值?确切的情况是我使用反射来获取类的声明字段。我想为我得到的字段设置假数据。

Field fieldset[] = cls.getDeclaredFields();

对于 fieldlist 的字段 fld,我可以使用 fld.getType() 获取类型 但我必须在运行时根据类型设置随机值

Random rand = new Random();

random.nextInt() 给了我一个整数...但我想要的是是否有任何方法或类似rand(fldtype) 的方式应该给我一个字段类型的随机值

【问题讨论】:

    标签: java reflection random


    【解决方案1】:

    您可以使用反射调用随机类的方法,并拥有一个将类型映射到随机类的函数的 Map。这将允许您只进行一次比较,并在较少维护的情况下添加/删除类型。

    但是,在这种情况下,您将难以转换返回类型。

    【讨论】:

      【解决方案2】:

      生成一个介于 0 到(字段数)-1 之间的随机数并获取您需要的字段。

      代码是这样的。

      Field fieldset[] = cls.getDeclaredFields();
      int noOfFiledsLessOne=fieldset.length-1;
      
      Random rand=new Random()
      
      Integer i=rand.float()*noOfFiledsLessOne;
      
      Field randField=fieldset[i];
      

      【讨论】:

        【解决方案3】:

        这大致是您需要的吗? Class<?>Field.getType() 的返回类型

        private static final List<Class<?>> seeds = new ArrayList<Class<?>>();
        
        public static int rand(Class<?> clazz) {
          int seed = seeds.indexOf(clazz);
          if(seed == -1) {
            seeds.add(clazz);
            seed = seeds.size() - 1;
          }
        
          Random random = new Random(seed);
          return random.nextInt();
        }
        

        【讨论】:

        • 实际上没有......我的代码应该能够给出随机字符串或随机整数或随机长或随机浮点数......
        猜你喜欢
        • 2021-09-21
        • 1970-01-01
        • 2023-01-17
        • 1970-01-01
        • 1970-01-01
        • 2020-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多