如何创建类似于C++模板类的Java类?

siv*_*udh 21 c++ java generics

如何在Java中编写相应的内容?

// C++ Code

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

public:
  SomeClass()
  {
  }
  void set(T data_)
  {
    data = data_;
  }
};
Run Code Online (Sandbox Code Playgroud)

Lau*_*ves 39

class SomeClass<T> {
  private T data;

  public SomeClass() {
  }

  public void set(T data_) {
    data = data_;
  }
}
Run Code Online (Sandbox Code Playgroud)

您可能还希望将类本身公开,但这几乎是Java的字面翻译.

C++模板和Java泛型之间还存在其他差异,但这些都不是您的示例的问题.

  • 实际上,一个不同于C++和Java之间的通用/模板事物但更为根本的区别在于,C++中的set方法复制提供的对象,而Java版本只是复制引用. (4认同)
  • ShaChris23:C++ stdlib中流行的习惯用法是使用duck typing:"如果所有尝试的用法都与对象一起工作,那么它具有预期的接口"(std :: reverse_iterator是一个很好的,清晰的例子),这类似于Python和[我的理解] Go.有时候自己制定这些限制仍然有用(或至少人们要求它:P),你可以使用boost :: enable_if,静态断言(在这种情况下使用类型特征来检测继承),以及类似的.概念应该有助于解决这个问题,但这是另一个故事. (3认同)
  • @ ShaChris23 [`is_base_of`](http://en.cppreference.com/w/cpp/types/is_base_of)正是如此,更不用说C++模板具有java泛型所没有的无数能力,它们是完整的上帝认为,IMO是C++最好的功能之一 (2认同)

Moi*_*vin 6

您使用"泛型"在Java中执行此操作:

public class SomeClass<T> {
  private T data;

  public SomeClass() {
  }

  public void set(T data) {
    this.data = data;
  }
};
Run Code Online (Sandbox Code Playgroud)

维基百科对Java中泛型有很好的描述.