拥有get set模型:
public class exampleclass
{
private Something something;
public Something getSomething()
{
return something;
}
public void setSomething(Something st)
{
something = st;
}
}
我想做这样的事情:
public class exampleclass
{
public Something something;
public void setSomething(Something st)
{
something = st;
}
}
但是我希望在类之外使用 readOnly 功能来“改变某些东西”(但可以在自己的类中重写)。知道如何为优化访问做到这一点。 (想想这将在android中使用,但使用纯java框架(libgdx))
答案 0 :(得分:3)
您可以在构造函数中设置thoose并公开public final字段:
public class ExampleClass
{
public final Something something;
public ExampleClass(Something st)
{
something = st;
}
}
答案 1 :(得分:0)
您可以使用final关键字。 你可以分配一次。
e.g
public class Exampleclass
{
public final Something something;
void Exampleclass(Something init) {
this.something = init;
}
}
然而,Something的内容仍然可以更改,因此您可以考虑返回某事的clone()。 (请参阅类java.util.Date,您仍然可以设置时间戳,在这种情况下只有clone()或复制构造函数帮助)。但是如果你的代码不是公共lib,那么你可以通过clone()离开
来获取getterpublic class Exampleclass
{
private Something something;
void Exampleclass(Something init) {
this.something = init;
}
void Something getSomething() {
return something.clone();
}
}
但这取决于某事。
另一个灵魂是Factory Pattern
,只有Factory
才能创建Something
。
然后public constructor
中没有Something
。只有工厂可以创建它。
public class Something() {
private int value;
protectectd Something(int value) {
this.value = value;
}
public tostring() {
System.out.println("values = " + value);
}
}
public class SomethingFactory() {
protected static Someting createSomething(int value) {
return new Something(value);
}
}
USage:
Something some = SomethingFactory.createSomething(3);
但是通过搜索“java Deisgn Patterns Factory”或FactoryPattern
阅读更多内容答案 2 :(得分:0)
我想您的问题是转义引用,如果要在返回时保存对象,请发送引用副本,则可以使用clone方法发送克隆的对象。
public Something getSomething()
{
return something.clone();
}
这将返回对象浅表副本,如果您想进行深克隆,请覆盖clone()方法,希望对您有所帮助。