public class A{
String S = "abc";
String R = "www";
}public class B{ String s2 = m("S"); public String m(String param){
//这里要怎么写,能使s2的值为class A的S值abc??
}
}也就是说,一个类有个方法,传入一个string参数,根据参数的值得出另一个类中“同名”变量的值分数不够可以开贴追加,最好给出代码
String S = "abc";
String R = "www";
}public class B{ String s2 = m("S"); public String m(String param){
//这里要怎么写,能使s2的值为class A的S值abc??
}
}也就是说,一个类有个方法,传入一个string参数,根据参数的值得出另一个类中“同名”变量的值分数不够可以开贴追加,最好给出代码
下面是非常规方法(前提是你有源码)用流读取class A 的java文件匹配字符串String S ,找到这一行。然后匹配引号里面的内容。
if("s".equals(param)){
return a.s;
}else if(("r".equals(param)){
return a.r;
}
大概就这样,初学者,哈哈
A.java
public class A {
String S = "abc";
String R = "www";
}B.java
package net.csdn;import java.lang.reflect.Field;public class B { String s2 = m("S"); public String m(String param) {
try {
Field field = A.class.getDeclaredField(param);
field.setAccessible(true);
System.out.println(field.getName());
//输出abc
System.out.println(field.get(new A()));
return "";
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}App.java
package net.csdn;public class App {
public static void main(String[] args) {
B b = new B();
}
}
public String m(String param) throws Exception{
//这里要怎么写,能使s2的值为class A的S值abc??
Class cla = Class.forName("A");
String str= "";
Field[] field = cla.getDeclaredFields();
//AccessibleObject.setAccessible(field, true);
for(int i=0;i<field.length;i++) {
if(param.equals(field[i].getName())) {
str =(String)field[i].get(cla.newInstance());
}
}
return str;
}
A.java
public class A {
String S = "abc";
String R = "www";
}B.java
package net.csdn;import java.lang.reflect.Field;public class B { String s2 = m("S"); public String m(String param) {
try {
Field field = A.class.getDeclaredField(param);
field.setAccessible(true);
System.out.println(field.getName());
//输出abc
System.out.println(field.get(new A()));
return "";
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}App.java
package net.csdn;public class App {
public static void main(String[] args) {
B b = new B();
}
}这样的 是会死
import java.lang.reflect.Field;public class A {
String S = "abc";
String R = "www";
public static void main(String[] args) {
System.out.println(new B().s2);
}
}class B {
String s2 = m("S");
public String m(String param){
String reStr = null;
try {
Field field = A.class.getDeclaredField(param);
field.setAccessible(true);
reStr = (String) field.get(new A());
} catch (Exception e) {
}
return reStr;
}
}
{
String s="abc";
String r="www";
}package ceshi0051;
import java.lang.reflect.*;
public class B
{
String s2=m("s");
public String m(String name)
{
try
{
Class c=A.class;
Field f=c.getDeclaredField(name);
if(f!=null)
{
Object obj=f.get(c.newInstance());
if(obj instanceof String)
{
return (String)obj;
}
else return "";
}
else return "";
}catch(Exception e){}
return "";
}
public static void main(String[] args){
B b=new B();
System.out.println(b.s2);
}
}
(1)第一种方法是利用反射机制,5楼已经讲的很详细了
(2)第二种方法是在类A中添加一个Map,把每个字段的名字和值分别保存进Map的Key和Value中(利用put()方法),这样,当在B类的m方法中需要相应字段名的字段值的时候,就在这个Map中查找就行了(利用getValue()方法)
个人意见,仅供参考