如何在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")

我想动态地设置在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")
    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());
    }
}