我需要将Class A
中创建的变量的名称传递给Class B
,因此我可以在该变量中放置一个值(在Class B
中)。
但是,在B类中,我不知道该变量的名称。
代码是这样的:
A类
public class A {
int valore; // this is the variable, in Class b, I don't know this name!
public void callClassB(){
ClassB.Method(what shoudld i put here?)
}
}
这是B级
public class B {
public void Method(the_Name_Of_TheVariable_I_get){
the_Name_Of_TheVariable_I_get = 5; // i need to do this
}
}
答案 0 :(得分:0)
您需要使用反射。
以下是Oracle的教程:http://docs.oracle.com/javase/tutorial/reflect/index.html
但是你无法在运行时获得变量的名称。但假设你有字段的名称,代码看起来像这样:
this.getClass().getDeclaredField(the_Name_Of_TheVariable_I_get).set(this, 5);
答案 1 :(得分:0)
为什么需要变量名?只需传递变量本身。在B类中创建一个方法
public int getValore(){
return valore;
}
然后在A类中使用修改代码
public void callClassB(){
ClassB.Method(getValore())
}
我真的不明白你想要在这里实现什么目标?
答案 2 :(得分:0)
您还可以使用以下方法:
interface ValueSetter {
void setValue(int value);
}
A类
public class A implements ValueSetter{
int valore;
public void callClassB(){
ClassB.Method(this)
}
void setValue(int value){
valore = value;
}
}
这是B级
public class B{
public void Method(ValueSetter valueSetter){
ValueSetter.setValue(5);
}
}
这更符合OOPS ..
答案 3 :(得分:0)
你可以传递变量"valore"
的名称,然后你需要反思来在你的方法中分配它:
a = new A();
Field f = a.getClass().getDeclaredField(varName);
f.set(a, 5);
a也可以是参数。 (有必要给出拥有该成员的实例)。
但是,这不是推荐的处理问题的方法,因为它不可靠,因为编译器无法检查您是否正在访问实际存在的项目。
最好使用接口,例如:
public interface Settable {
public void set(int value);
}
然后:
public class A implements Settable {
private int valore;
public void set(int value) {
valore = value;
}
public void callClassB(){
ClassB.Method(this);
}
}
和B:
public class B{
public void Method(Settable settable){
settable.set(5);
}
}