Dan*_*Dan 5 java methods private-methods
我给了一个有私有方法的类,比如setCoors(int x,int y).该类的构造函数也包含setCoors.在另一个类中,我想要一个调用setCoors的方法setLocation.这可能吗?
新问题:
如果我不被允许将方法设置为公开,这可能吗?
public class Coordinate{
public Coordinate(int a, int b){
setCoors(a,b)
}
private void setCoords(int x, int y)
}
public class Location{
private Coordinate loc;
public void setLocation(int a, int b)
loc = new Coordinate(a,b)
}
Run Code Online (Sandbox Code Playgroud)
最好和最有帮助的答案取决于问题的背景,我认为,这并不是完全明显的.
如果问题是关于私人意图的新手问题,则答案"否"是完全合适的.那是:
现在,如果,也好,这可能是一个延伸(谢谢Brian :)),问题来自一个更"高级"的背景,其中一个人正在研究"我知道私人意味着私人但是有语言漏洞"的问题",然后,井,存在是这样的漏洞.它是这样的:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
class C {
private int x = 10;
private void hello() {System.out.println("Well hello there");}
}
public class PrivateAccessDemo {
public static void main(String[] args) throws Exception {
C c = new C();
List<Field> fields = Arrays.asList(C.class.getDeclaredFields());
for (Field f: fields) {
f.setAccessible(true);
System.out.println(f.getName() + " = " + f.get(c));
}
List<Method> methods = Arrays.asList(C.class.getDeclaredMethods());
for (Method m: methods) {
m.setAccessible(true);
m.invoke(c);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
x = 10
Well hello there
Run Code Online (Sandbox Code Playgroud)
当然,这确实不是应用程序员所做的事情.但事实上可以做到这样的事情是值得知道的,而不是应该忽略的事情.恕我直言.
不,private意味着该方法只能在定义它的类内部调用。您可能希望setLocation创建该类setCoords所在的新实例,或更改 上的可见性setCoords。
编辑:您发布的代码将起作用。请注意,Location该类的任何实例都将绑定到它自己的Coordinate对象。如果您Coordinate在代码中的其他地方创建了一个新对象,您将无法修改其内部状态。换句话说,线
Coordinate myCoord = new Coordinate(4, 5);
Run Code Online (Sandbox Code Playgroud)
将创建myCoord将永远具有坐标4和的对象5。
| 归档时间: |
|
| 查看次数: |
23542 次 |
| 最近记录: |