我有一个有很多变量的类,我想让一个变量只能由同一个包中的另一个类访问。
我知道这是一个复杂的场景,但有没有办法这样做?
答案 0 :(得分:3)
你不能使变量“只能被另一个类访问”。你可以做的是为它创建一个getter并检查调用getter的类,但是我没有看到任何意义
答案 1 :(得分:2)
您可以将变量package-private,因此包中的任何类都可以访问它。
您还可以在要访问它的类中提供对该变量的引用。
更一般地说,您面临的问题通常意味着设计问题。您应该尝试重新考虑您的架构:为什么您只需要只有其他类可访问的变量?有什么特别之处以及这些课程有什么特别之处?
答案 2 :(得分:1)
了解该包中有许多类,并且只有一个类可以访问该变量。
其价值:
一个糟糕的解决方案是在一个单独的包中的继承层次结构中添加一个类。无助于防止恶意编程。
package pkg;
class MainClass extends VariableBearer {
... variable
package pkg;
class SpecificClass implements VariableUser {
MainClass main;
package pkg.var {
class VariableBearer extends MainClassParent {
protected Object variable;
package pkg.var
interface VariableUser
如果您的特定类与主类有某种功能关系,那就更好了。也就是说,这些类的联系更紧密。
从内部类到工厂方法注入(私有)字段的几种变体。
class MainClass {
private Object variable;
// Most tight and simple solution: factory with injection
SpecificClass create() {
return new SpecificClass(variable);
}
class VariableUsage {
}
class SpecificClass extends VariableUsage {
... MainClass.this.variable
class SpecificClass {
VariableUsage usage = ...
... usage.getVariable()
答案 3 :(得分:0)
解决这个问题的一种方法是:
假设您必须将变量a
从类A
传递到类B
,请在类A
中使用公共getter方法返回{{1}的值并在类a
中调用该方法。
答案 4 :(得分:0)
最好的方式,例如,如果你想使用从X到Y的变量并希望它是一个字符串或任何其他东西使用Public static YOUR_VARIABLE_NAME
let在X类中,所以你想在类Y中使用然后输入{{ 1}}在这里你访问了从1个类到另一个类的变量。