如何为任何用户定义的类创建包装类

时间:2011-04-20 14:20:37

标签: java wrapper

有人告诉我,我们可以为任何用户定义的类创建包装类,而不是仅为原语创建,如果是的话!然后我们如何创建它,我不知道从哪里开始,请你提供任何演示代码用于此目的。 等待你的回复......

3 个答案:

答案 0 :(得分:13)

术语“包装”有时与封装相同,其中对象或类型在内部由类作为其实现细节的一部分使用,并且不会将其暴露给外部代码。但是,换行通常特指将类封装在另一个类中的行为,该类实现与包装类相同的相同接口,但稍微改变其行为或添加新功能(Decorator Pattern),或者外部类实现了一个不同的接口,实质上是转换包装类以使其与另一个程序(Adapter Pattern)兼容。这两种类型的包装几乎总是手动完成,必须在编译时完成(通过编写代码)。

您还可以使用java.lang.reflect.Proxy.newProxyInstance(...)在运行时为几乎任何对象生成动态代理。您可以阅读Dynamic Proxy Classes上的官方指南,了解如何使用它。但是,您尚未提供任何用例,因此这可能不是您正在寻找的。代理通常保留用于保护对象或通过RPC委托给远程服务器,并且可能非常复杂。

答案 1 :(得分:0)

wrapper class-wrapper类是用于将原始数据包装或封装到其他类中的实例化对象的类

public class wrapperdemo {

public static void main(String[] args) {
    //integer case
    //primitive type
    int i=20;
    //reference type
    //(explicit declaration of the primitive to reference object)
    Integer iref =new Integer(i);
    //boxing(changing primitive to reference variable)
    System.out.println(iref);
    //unboxing(fetching primitive out of reference variable)
    int j=iref.intValue();
    System.out.println(j);  

    int k = 40;
    //(implicit declaration of primitive to refernce object)
    Integer kref=k;                  //boxing
    System.out.println(kref);
    int k1=kref.intValue();
    System.out.println(k1);         //unboxing

    //character case
    //explicit conversion of char primitive to refernec object
    char ch='D';
    Character cref=new Character(ch);   //boxing
    System.out.print(cref);
    /*char ch1=cref.charValue();          //unboxing
    System.out.println(ch1);*/

    //implicit conversion
    char c='S';
    Character ccref=c;                 //boxing
    System.out.print(ccref);
    /*char cc1=ccref.charValue();
    System.out.println(cc1);*/
    }

}

答案 2 :(得分:0)

用于创建包装器的示例代码:

import java.util.ArrayList;
import java.util.List;


class IntVal {
    private int i;
    public IntVal(int a) {
        i = a;
    }

    public int getVal() {
        return i;
    }

    public void setValue(int a) {
        this.i = a;
    }

    public void increment() {
        i++;
    }

    @Override
    public String toString() {
        return Integer.toString(i);
    }
}

public class WrapperClass {

    public static void main(String[] args) {



  List list = new ArrayList();

  for (int i = 0; i < 10; i++) {
      list.add(new IntVal(i)); 
  }
  System.out.println(list);
  for (int i = 0; i < list.size(); i++) {
      ((IntVal) list.get(i)).increment();
  }

  System.out.println(list);

    }
}