class Name{
private String name;
public String getName(){
return name;
}
}
public class SetName {
public static void main(String[] args) {
// TODO Auto-generated method stub
Name nm = new Name();
Scanner input = new Scanner(System.in);
String inputName = input.nextLine();
nm.getName() = inputName; // 为什么这里不行啊,除了setName(),怎样在这里修改名字
System.out.print(nm.getName());
}
}
12 个解决方案
#1
getName返回一个字符串值,又不是返回name的引用,你把值赋给这个变量不会改变到nm.name;
要么用set方法,要么把name定义为public,要么通过构造方法传递
要么用set方法,要么把name定义为public,要么通过构造方法传递
#2
反射,虽然不推荐(既然定义为private的,就是不想破坏封装性,反射可以绕过这个private的限定,而且影响性能)。
#3
不行因为语法就是错误的 解决办法 可以参照上面说的 都可以的!
#4
主要是没搞清楚各种变量的属性。解决方法同楼上。
#5
请问什么是反射?能简单说一下吗?
#6
普通的使用,是从正面的:我们可以直接用public的方法,可以操作public的属性,private的东西无法按照自己当下的意愿任意操作的。
通过反射,可以将一个类拆成零零散散的各个“部件”,有Field,有Method,有Constructor。然后我们可以针对一个特定的对象,其属性也许是private的(此时它是不可访问的),我们可以通过得到对应的Field,通过setAccessible将其设置为可访问的,这样就可以操作了(也破坏了该对象的封装性)。
查看下API和相关反射的介绍博文,可能帮助更多~
#7
方法调用不能作为左值。
既然注定要修改,提供一个setName方法。
既然注定要修改,提供一个setName方法。
#8
反射,虽然不推荐(既然定义为private的,就是不想破坏封装性,反射可以绕过这个private的限定,而且影响性能)。
请问什么是反射?能简单说一下吗?
普通的使用,是从正面的:我们可以直接用public的方法,可以操作public的属性,private的东西无法按照自己当下的意愿任意操作的。
通过反射,可以将一个类拆成零零散散的各个“部件”,有Field,有Method,有Constructor。然后我们可以针对一个特定的对象,其属性也许是private的(此时它是不可访问的),我们可以通过得到对应的Field,通过setAccessible将其设置为可访问的,这样就可以操作了(也破坏了该对象的封装性)。
查看下API和相关反射的介绍博文,可能帮助更多~
谢谢了 好像明白点了
#9
给你提供几个解决问题的思路:
1. 上面说的反射
2. 通过创建Name类的子类,重写name属性相关的操作(但是这个你需要保证其内部其他方法的实现不会受到影响)
1. 上面说的反射
2. 通过创建Name类的子类,重写name属性相关的操作(但是这个你需要保证其内部其他方法的实现不会受到影响)
#10
反射,就是访问私有的效率低,既然私有了,就尽量别用反射去强行获取
#11
l为啥不想用setter方法呢?
#12
方法调用不能作为左值。
既然注定要修改,提供一个setName方法。
反射,虽然不推荐(既然定义为private的,就是不想破坏封装性,反射可以绕过这个private的限定,而且影响性能)。
给你提供几个解决问题的思路:
1. 上面说的反射
2. 通过创建Name类的子类,重写name属性相关的操作(但是这个你需要保证其内部其他方法的实现不会受到影响)
l为啥不想用setter方法呢?
小弟已经写好了这个程序,老师最后接受了,比先前那个好很多....再次拜谢你们....
#1
getName返回一个字符串值,又不是返回name的引用,你把值赋给这个变量不会改变到nm.name;
要么用set方法,要么把name定义为public,要么通过构造方法传递
要么用set方法,要么把name定义为public,要么通过构造方法传递
#2
反射,虽然不推荐(既然定义为private的,就是不想破坏封装性,反射可以绕过这个private的限定,而且影响性能)。
#3
不行因为语法就是错误的 解决办法 可以参照上面说的 都可以的!
#4
主要是没搞清楚各种变量的属性。解决方法同楼上。
#5
反射,虽然不推荐(既然定义为private的,就是不想破坏封装性,反射可以绕过这个private的限定,而且影响性能)。
请问什么是反射?能简单说一下吗?
#6
反射,虽然不推荐(既然定义为private的,就是不想破坏封装性,反射可以绕过这个private的限定,而且影响性能)。
请问什么是反射?能简单说一下吗?
普通的使用,是从正面的:我们可以直接用public的方法,可以操作public的属性,private的东西无法按照自己当下的意愿任意操作的。
通过反射,可以将一个类拆成零零散散的各个“部件”,有Field,有Method,有Constructor。然后我们可以针对一个特定的对象,其属性也许是private的(此时它是不可访问的),我们可以通过得到对应的Field,通过setAccessible将其设置为可访问的,这样就可以操作了(也破坏了该对象的封装性)。
查看下API和相关反射的介绍博文,可能帮助更多~
#7
方法调用不能作为左值。
既然注定要修改,提供一个setName方法。
既然注定要修改,提供一个setName方法。
#8
反射,虽然不推荐(既然定义为private的,就是不想破坏封装性,反射可以绕过这个private的限定,而且影响性能)。
请问什么是反射?能简单说一下吗?
普通的使用,是从正面的:我们可以直接用public的方法,可以操作public的属性,private的东西无法按照自己当下的意愿任意操作的。
通过反射,可以将一个类拆成零零散散的各个“部件”,有Field,有Method,有Constructor。然后我们可以针对一个特定的对象,其属性也许是private的(此时它是不可访问的),我们可以通过得到对应的Field,通过setAccessible将其设置为可访问的,这样就可以操作了(也破坏了该对象的封装性)。
查看下API和相关反射的介绍博文,可能帮助更多~
谢谢了 好像明白点了
#9
给你提供几个解决问题的思路:
1. 上面说的反射
2. 通过创建Name类的子类,重写name属性相关的操作(但是这个你需要保证其内部其他方法的实现不会受到影响)
1. 上面说的反射
2. 通过创建Name类的子类,重写name属性相关的操作(但是这个你需要保证其内部其他方法的实现不会受到影响)
#10
反射,就是访问私有的效率低,既然私有了,就尽量别用反射去强行获取
#11
l为啥不想用setter方法呢?
#12
方法调用不能作为左值。
既然注定要修改,提供一个setName方法。
反射,虽然不推荐(既然定义为private的,就是不想破坏封装性,反射可以绕过这个private的限定,而且影响性能)。
给你提供几个解决问题的思路:
1. 上面说的反射
2. 通过创建Name类的子类,重写name属性相关的操作(但是这个你需要保证其内部其他方法的实现不会受到影响)
l为啥不想用setter方法呢?
小弟已经写好了这个程序,老师最后接受了,比先前那个好很多....再次拜谢你们....