如何在java中动态使用在另一个类中定义的静态变量?
我想动态地设置在java的另一个类中定义的静态变量的值如何在java中动态使用在另一个类中定义的静态变量?,java,Java,我想动态地设置在java的另一个类中定义的静态变量的值 Class A { // Variable Definitions - public static site1_URL = ""; public static site2_URL = ""; .... ... More variable defns ... } 在类B中,我想根据类B中的某个变量动态设置site1\uURL或site2\uURL的值或其他值 Class B { .... if(var_x == "Site1")
Class A
{
// Variable Definitions -
public static site1_URL = "";
public static site2_URL = "";
....
... More variable defns
...
}
在类B中,我想根据类B中的某个变量动态设置site1\uURL或site2\uURL的值或其他值
Class B
{
....
if(var_x == "Site1")
A.Site1_URL = "www.google.com";
elseif(var_x == "Site2")
A.site2_URL = "www.google.com";
....
//instead of above I want to achieve -
A.<var_x>_URL = "www.google.com";
}
B类
{
....
如果(变量x==“站点1”)
A.Site1_URL=“www.google.com”;
elseif(变量x==“站点2”)
A.site2_URL=“www.google.com”;
....
//我想实现的不是上述目标-
A._URL=“www.google.com”;
}
对于静态变量,在变量前面加上类名,如下所示:
A.site1_URL = "www.google.com";
考虑上面提到的A类定义
Class B
{
....
if(var_x == "Site1")
A.Site1_URL = "www.google.com";
elseif(var_x == "Site2")
A.site2_URL = "www.google.com";
....
//instead of above I want to achieve -
A.<var_x>_URL = "www.google.com";
}
B类
{
....
如果(变量x==“站点1”)
A.Site1_URL=“www.google.com”;
elseif(变量x==“站点2”)
A.site2_URL=“www.google.com”;
....
//我想实现的不是上述目标-
A._URL=“www.google.com”;
}
我不知道;我不想使用switch或if-elseif-else,因为我需要设置更多的变量。您可以通过反射和类来实现它 另一种方法是重构代码并使用
import java.util.*;
导入java.lang.*;
课堂现场{
私有字符串url;
公共站点(字符串url){
this.url=url;
}
公共void setUrl(字符串url){
this.url=url;
}
公共字符串getUrl(){
返回url;
}
}
甲级{
公共静态地图站点;
静止的{
sites=newhashmap();
站点。放置(“站点1”,新站点(“http://url1.com"));
站点。放置(“站点2”,新站点(“http://url2.com"));
}
}
B类{
public void setUrl(字符串别名、字符串值){
如果(A.sites.containsKey(别名)){
A.sites.get(别名).setUrl(值);
}
}
}
类应用程序{
公共静态void main(字符串参数[]){
B=新的B();
b、 setUrl(“site1”、“a1”);
b、 setUrl(“site2”、“a2”);
b、 setUrl(“site3”、“a3”);
System.out.println(A.sites.get(“site1”).getUrl());
System.out.println(A.sites.get(“site2”).getUrl());
}
}
我认为第二种方法更可取,反射速度慢,在这种情况下没有多大意义。同样,在第二种情况下,您可以更改别名或迭代抛出
Map
。您可以轻松地修改Site
类,向其中添加其他字段和方法。A.site1\u URL=“StackOverflow.com”怎么样;这就像在B类变量值的基础上设置多个变量中的一个。。。。换言之,开关(VARYB){你到底在哪里遇到麻烦。给我们看代码。考虑上面提到的A类定义。B类{……我想达到像-A.YURURL =“www. GooGo.com”之类的东西;…}我不想使用switch或if elseif else,因为我需要设置更多的变量。你应该使用一个映射,键是站点名称,值是URL。映射将支持许多URL,你不需要在编译时知道站点名称。你可以使用refection动态查找字段名称,为什么不要编辑你的问题,而不是添加答案?抱歉(我第一次使用它)…你有好的例子可以参考吗?谢谢尼古拉。这对我很有效。我使用了反射和字段数组。
import java.util.*;
import java.lang.*;
import java.lang.reflect.*;
class A {
public static String site1_URL = "http://url1.com";
public static String site2_URL = "http://url2.com";
}
class B {
public void setUrl(String alias, String value) throws IllegalAccessException {
Field[] fields = A.class.getDeclaredFields();
for(Field field : fields) {
if(field.getName().equals(alias + "_URL")) {
field.set(field, value);
}
}
}
}
class Application {
public static void main(String args[]) throws IllegalAccessException {
B b = new B();
b.setUrl("site1", "a1"); // sets value
b.setUrl("site2", "a2"); // sets value
b.setUrl("site3", "a3"); // does nothing
System.out.println(A.site1_URL); // prints a1
System.out.println(A.site2_URL); // prints a2
}
}
import java.util.*;
import java.lang.*;
class Site {
private String url;
public Site(String url) {
this.url = url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
}
class A {
public static Map<String, Site> sites;
static {
sites = new HashMap<>();
sites.put("site1", new Site("http://url1.com"));
sites.put("site2", new Site("http://url2.com"));
}
}
class B {
public void setUrl(String alias, String value) {
if(A.sites.containsKey(alias)) {
A.sites.get(alias).setUrl(value);
}
}
}
class Application {
public static void main(String args[]) {
B b = new B();
b.setUrl("site1", "a1");
b.setUrl("site2", "a2");
b.setUrl("site3", "a3");
System.out.println(A.sites.get("site1").getUrl());
System.out.println(A.sites.get("site2").getUrl());
}
}