java中如何用参数作为变量名来定义变量
比如:publicfun(Strings){...}在该构造器中我要用参数s作为变量名来定义一个int的参数,如何做到?大家可能误会了阿,比如我调用fun(A)以后,构造...
比如:
public fun(String s){
...
}
在该构造器中我要用参数s作为变量名 来定义一个int的参数,如何做到?
大家可能误会了阿,比如我调用fun(A)以后,构造器就帮我生成了一个名字为A的变量,调用fun(B)以后就生成了一个名字为B的变量,而且此变量可以被其他方法调用,不能为局部变量
先谢谢 123楼不过不是我想要的答案 展开
public fun(String s){
...
}
在该构造器中我要用参数s作为变量名 来定义一个int的参数,如何做到?
大家可能误会了阿,比如我调用fun(A)以后,构造器就帮我生成了一个名字为A的变量,调用fun(B)以后就生成了一个名字为B的变量,而且此变量可以被其他方法调用,不能为局部变量
先谢谢 123楼不过不是我想要的答案 展开
9个回答
展开全部
根据你的要求,生成的变量不是局部变量其他方法也可以使用,那这个变量只有是类的属性了,
1 如果你的A 或着 B 是事先知道的,那就是一个简单的赋值,这肯定不是你想要的
2 实现这个变量名是不知道的,也就是说这个类的属性开始是没有的,是你调用该构造方法的时候动态生成的,这应该是你的意思吧
1)。根据你要动态生成的需求,所以这个不可能是你现在就写上去的,只有利用 反射 在jvm加载类的时候去动态生成了,但是我查了一下 Class 的API,里面根本就没有对类添加属性的操作,API里只提供了类的属性,构造器,方法的读,也就是一系列的get方法,所以我觉得这个实现不了。
PS:我觉得你再读读你的需求,看看可不可以用第一种方式解决,其实这个有点累死工厂模式的思想,如果这个实在不行还是想想其他的方法
1 如果你的A 或着 B 是事先知道的,那就是一个简单的赋值,这肯定不是你想要的
2 实现这个变量名是不知道的,也就是说这个类的属性开始是没有的,是你调用该构造方法的时候动态生成的,这应该是你的意思吧
1)。根据你要动态生成的需求,所以这个不可能是你现在就写上去的,只有利用 反射 在jvm加载类的时候去动态生成了,但是我查了一下 Class 的API,里面根本就没有对类添加属性的操作,API里只提供了类的属性,构造器,方法的读,也就是一系列的get方法,所以我觉得这个实现不了。
PS:我觉得你再读读你的需求,看看可不可以用第一种方式解决,其实这个有点累死工厂模式的思想,如果这个实在不行还是想想其他的方法
展开全部
Java不是动态语言所以没有办法做到运行时动态添加属性。不过可以变通实现
public class Test {
private Map<String, Object> fields = new HashMap<String, Object>();
public void setData(String s, Object v) {
fields.put(s, v);
}
public Object getData(String s) {
return fields.get(s);
}
}
public class Test {
private Map<String, Object> fields = new HashMap<String, Object>();
public void setData(String s, Object v) {
fields.put(s, v);
}
public Object getData(String s) {
return fields.get(s);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Java不是动态语言,不能运行时动态添加属性。不过可以通过
添加方法来实现例如下面
public class Test {
private Map<String, Object> fields = new HashMap<String, Object>();
public void setData(String s, Object v) {
fields.put(s, v);
}
public Object getData(String s) {
return fields.get(s);
}
}
其实就是添加了一个属性,应该就可以了
添加方法来实现例如下面
public class Test {
private Map<String, Object> fields = new HashMap<String, Object>();
public void setData(String s, Object v) {
fields.put(s, v);
}
public Object getData(String s) {
return fields.get(s);
}
}
其实就是添加了一个属性,应该就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在方法中的参数变成全局变量,你需要使用集合容器hashmap等;以上是可运行的
把生成的变量都保存在hashmap中下次可以调用,
import java.util.HashMap;
public class aa {
static HashMap hash;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
hash = new HashMap();
a("wu");
b("zhong");
System.out.println(hash.get("a"));
System.out.println(hash.get("b"));
}
static void a (String a){
hash.put("a", a);
}
static void b(String b){
hash.put("b", b);
}
}
把生成的变量都保存在hashmap中下次可以调用,
import java.util.HashMap;
public class aa {
static HashMap hash;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
hash = new HashMap();
a("wu");
b("zhong");
System.out.println(hash.get("a"));
System.out.println(hash.get("b"));
}
static void a (String a){
hash.put("a", a);
}
static void b(String b){
hash.put("b", b);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是重载 和变量名没有关系 是和变量的个数或者是变量的类型有关系 你说的那个是覆盖不是重载
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询