Как создать класс Java, аналогичный классу шаблонов С++?
Как написать эквивалент этого в Java?
// C++ Code
template< class T >
class SomeClass
{
private:
T data;
public:
SomeClass()
{
}
void set(T data_)
{
data = data_;
}
};
Ответы
Ответ 1
class SomeClass<T> {
private T data;
public SomeClass() {
}
public void set(T data_) {
data = data_;
}
}
Вероятно, вы также захотите сделать сам класс общедоступным, но это почти буквальный перевод на Java.
Существуют и другие отличия между шаблонами С++ и генериками Java, но ни один из них не является проблемой для вашего примера.
Ответ 2
Вы используете "generics" для этого в Java:
public class SomeClass<T> {
private T data;
public SomeClass() {
}
public void set(T data) {
this.data = data;
}
};
Википедия имеет хорошее описание generics в Java.
Ответ 3
/**
* This class is designed to act like C# 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;
}
}
Ответ 4
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;
}
}