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参数,根据参数的值得出另一个类中“同名”变量的值分数不够可以开贴追加,最好给出代码

解决方案 »

  1.   

    感觉 使用 常规方法 无法实现
    下面是非常规方法(前提是你有源码)用流读取class A 的java文件匹配字符串String S ,找到这一行。然后匹配引号里面的内容。
      

  2.   

    A a = new A();
    if("s".equals(param)){
        return a.s;
    }else if(("r".equals(param)){
        return a.r;
    }
    大概就这样,初学者,哈哈
      

  3.   

    反射:package net.csdn;
    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();
    }
    }
      

  4.   


      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;
      }
      

  5.   

    package net.csdn;
    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();
        }
    }这样的 是会死
      

  6.   


    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;
        }
    }
      

  7.   

    package ceshi0051;public class A
    {
    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);
    }
    }
      

  8.   

        有两种方法
        (1)第一种方法是利用反射机制,5楼已经讲的很详细了
        (2)第二种方法是在类A中添加一个Map,把每个字段的名字和值分别保存进Map的Key和Value中(利用put()方法),这样,当在B类的m方法中需要相应字段名的字段值的时候,就在这个Map中查找就行了(利用getValue()方法)
        个人意见,仅供参考