是否有一个标准类包装引用并提供getter和setter?

时间:2009-08-09 13:27:34

标签: java wrapper

抱歉这个愚蠢的问题。

我很确定,Java API提供了一个包装引用的类, 并为其提供吸气剂和定位器。

class SomeWrapperClass<T> {
    private T obj;

    public T get(){ return obj; }

    public void set(T obj){ this.obj=obj; }
}

我是对的吗? Java API中是否有这样的东西?

谢谢。

是的,我可以自己写,但我为什么要模仿现有的功能呢?

编辑:我想用它作为参考 参数(如C#中的 ref 关键字),或更具体, 能够“写入方法参数”;)

8 个答案:

答案 0 :(得分:7)

AtomicReference类,它提供了这个。它主要用于确保原子性,特别是使用getAndSet()和compareAndSet()方法,但我想它可以满足您的需求。

答案 1 :(得分:1)

当我在编写C ++多年后开始用Java编程时,我担心我无法从函数中返回多个对象。

事实证明,这不仅是可能的,而且还改善了我的节目的设计。

但是,Java的CORBA实现使用单元素数组通过引用传递内容。这也适用于基本类型。

答案 2 :(得分:0)

java.lang.ref.Reference,但不可变(缺少setter)。 java.lang.ref文档说:

  

每个参考对象都提供获取和清除引用的方法。除了清除操作之外,参考对象也是不可变的,因此不提供设置操作。程序可以进一步子类化这些子类,添加为其目的所需的任何字段和方法,或者它可以使用这些子类而不进行更改。

修改

void refDemo(MyReference<String> changeMe) {
   changeMe.set("I like changing!");
   ...

来电者:

String iWantToChange = "I'm like a woman";
Reference<String> ref = new MyReference<String>(iWantToChange)
refDemo(myRef);
ref.get(); 

我不喜欢它,代码太多了。必须在语言级别支持此类功能,如在C#中。

答案 3 :(得分:0)

......好问题,但还没有遇到过。我投不了。

....嗯,经过一番反思,反思可能就是接近它的: http://java.sun.com/developer/technicalArticles/ALT/Reflection/

答案 4 :(得分:0)

我不清楚这是什么,但你可以使用Reference类型的子类之一。他们在构造函数中设置引用而不是setter。

值得指出的是,Reference子类主要用于促进垃圾收集,例如与WeakHashMap一起使用时。

答案 5 :(得分:0)

我很想问你为什么要这样做,但我认为你可以从函数中返回多个对象......

每当我想要这样做时,我就使用了数组或容器对象......

bool doStuff(int params, ... , SomeObject[] returnedObject)
{
    returnedObject[0] = new SomeObject();
    return true;
}

void main(String[] args)
{
    SomeObject myObject;
    SomeObject[1] myObjectRef = new SomeObject[1];
    if(doStuff(..., myObjectRef))
    {
        myObject = myObjectRef[0];
        //handle stuff
    }
    //could not initialize.
}

答案 6 :(得分:0)

如果您尝试从函数返回多个值,我会创建一个像三元组一样的Pair,Triple和&amp; c类。

class Pair<A,B> {
A a;
B b;
public void Pair() { }
public void Pair(A a,B b) {
this.a=a;
this.b=b;
}
public void Pair( Pair<? extends A,? extends B> p) {
this.a=p.a;
this.b=p.b;
}
public void setFirst(A a) { this.a=a; }
public A getFirst() { return a; }
public void setSecond(B b) { this.b=b; }
public B getSecond() { return b; }
}

这将允许您返回2(技术上无限的)返回值

/* Reads a line from the provided input stream and returns the number of
 * characters read and the line read.*/
public Pair<Integer,String> read(System.in) {
...
}

答案 7 :(得分:0)

我认为没有针对您的意图设计的Java API类,我也更喜欢您的示例(包装类)然后使用这个“数组技巧”,因为您可以稍后插入一些警卫或者可以通过方面检查多个思考或反射,你可以添加横切关注功能的功能。

但请确保这就是你想要做的!也许你可以重新设计并找到另一种解决方案?