web-dev-qa-db-ja.com

Javaクラスを作成する方法、C ++テンプレートクラスに似ていますか?

これに相当するものをJavaでどのように書くのですか?

// C++ Code

template< class T >
class SomeClass
{
private:
  T data;

public:
  SomeClass()
  {
  }
  void set(T data_)
  {
    data = data_;
  }
};
21
sivabudh
class SomeClass<T> {
  private T data;

  public SomeClass() {
  }

  public void set(T data_) {
    data = data_;
  }
}

また、クラス自体をパブリックにしたいと思うかもしれませんが、それは文字通りJavaへの変換です。

C++テンプレートとJavaジェネリック)の間には他の違いがありますが、これらの例のどれもあなたの例にとって問題ではありません。

39

Javaでこれを行うには、「ジェネリック」を使用します。

public class SomeClass<T> {
  private T data;

  public SomeClass() {
  }

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

ウィキペディアには Javaでのジェネリック の適切な説明があります。

6
Moishe Lettvin
/**
 * This class is designed to act like C#'s properties.
 */
public class Property<T>
{
  private T value;

  /**
   * By default, stores the value passed in.
   * This action can be overridden.
   * @param _value
   */
  public void set (T _value)
  {
    value = _value;
  }

  /**
   * By default, returns the stored value.
   * This action can be overridden.
   * @return
   */
  public T get()
  {
    return value;
  }
}
3
Bill
public class GenericClass<T> {
    private T data;

    public GenericClass() {}

    public GenericClass(T t) {
        this.data = t;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    // usage 
    public static void main(String[] args) {
        GenericClass<Integer> gci = new GenericClass<Integer>(new Integer(5)); 
        System.out.println(gci.getData());  // print 5; 

        GenericClass<String> gcs = new GenericClass<String>(); 
        gcs.setData("abc");
        System.out.println(gcs.getData());  // print abc;
    }
}
1
Jim Yanyan Bai