使用键引用从Java公共类获取值 - java

我们有一个Java公共类,

public class Test {
    public class ob1 {
        public static final String test = "T1T1";
        public static final String test2 = "T7T7";
    }

    public class ob2 {
        public static final String test = "T2T2";
        public static final String test2 = "T8T8";
    }

    public static String getVal(int type, String key) {
        return type == 1 ? ob1.key : ob2.key;
    }
}

如何从类对象获取值,例如

String t = Test.getVal(1, test);   /// This should return T1T1

String t = Test.getVal(2, test2);  /// This should return T8T8

参考方案

在Java中,这不可能为对象加上String后缀以访问其字段。

使用反射从字段名称访问字段或重构类,以使其提供带有Map<String,String>的实现键值。

这是键值映射的完整示例。

由于ob1ob2是内部类,因此它们对static的使用有一些限制(对于作为方法的字段)。
因此,一种解决方法是在外部类中声明static映射和static检索方法。
它会稍微分散责任,但由于这些修饰符约束,很难以其他方式执行,而只能在内部类中使用实例字段和方法。

import java.util.HashMap;
import java.util.Map;

public class Test {

    public class ob1 {
      public static final String test = "T1T1";
      public static final String test2 = "T7T7";
    }

    public class ob2 {
      public static final String test = "T2T2";
      public static final String test2 = "T8T8";
    }

    static Map<String, String> valuesObj1;
    static Map<String, String> valuesObj2;

    static {
      valuesObj1 = new HashMap<>();
      valuesObj1.put("test", ob1.test );
      valuesObj1.put("test2", ob1.test2);

      valuesObj2 = new HashMap<>();
      valuesObj2.put("test", ob2.test);
      valuesObj2.put("test2",ob2.test2);
    }

    public static String getVal(int type, String key) {
      return type == 1 ? valuesObj1.get(key) : valuesObj2.get(key);
    }

    public static void main(String[] args) {
      System.out.println(Test.getVal(1, "test"));
      System.out.println(Test.getVal(2, "test2"));
    }
}

它打印:

T1T1

T8T8

Java:找到特定字符并获取子字符串 - java

我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

在Map中,如果我们使用现有键进行修改,则不会获得ConcurrentModificationException - java

我有以下代码,我希望从情况2的情况下抛出ConcurrentModificationException,但它运行成功。据我所知,如果我对地图中的单个键执行相同的操作,则不会抛出异常,因为here但是当我重现这种具有两个案例的多个密钥的场景时,通过新密钥修改。通过现有密钥进行修改。情况1: Map<String,String> mp = new H…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…

测试hashCode的字符串 - java

我正在编写如下所示的代码:String s1=new String("hi"); System.out.println(s1.hashCode()); String s2=new String("hi"); System.out.println(s2.hashCode()); String s3=s1.intern()…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…