我们有一个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>
的实现键值。
这是键值映射的完整示例。
由于ob1
和ob2
是内部类,因此它们对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…