Java 泛型怎么 new
Java 是一种面向对象的编程语言,其中的泛型机制使得代码更加灵活和可重用。泛型允许我们在类或方法中使用类型参数,这样可以在编译时进行类型检查,并提供了更好的类型安全性。
在 Java 中,泛型可以用于类、接口和方法。在使用泛型时,我们可以通过指定类型参数来创建泛型对象。
泛型类的创建
我们可以通过在类名后面加上尖括号<>
和类型参数来定义泛型类。下面是一个简单的示例代码:
public class GenericClass<T> {
private T value;
public GenericClass(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
在上面的代码中,GenericClass
是一个泛型类,它的类型参数是T
。我们可以通过在创建对象时指定类型参数来创建泛型对象。
示例代码:
GenericClass<String> gc = new GenericClass<>("Hello");
String value = gc.getValue();
System.out.println(value); // 输出: Hello
上面的代码创建了一个GenericClass
对象,它的类型参数是String
。通过调用getValue
方法可以获取到对象中存储的值。
泛型接口的创建
除了泛型类,我们还可以创建泛型接口。泛型接口的创建方式与泛型类类似,只是将类型参数放在接口名后面的尖括号<>
中。
下面是一个示例代码:
public interface GenericInterface<T> {
T getValue();
void setValue(T value);
}
在上面的代码中,GenericInterface
是一个泛型接口,它的类型参数是T
。我们可以在实现该接口时指定具体的类型。
示例代码:
public class GenericInterfaceImpl implements GenericInterface<String> {
private String value;
@Override
public String getValue() {
return value;
}
@Override
public void setValue(String value) {
this.value = value;
}
}
GenericInterface<String> gi = new GenericInterfaceImpl();
gi.setValue("Hello");
String value = gi.getValue();
System.out.println(value); // 输出: Hello
上面的代码创建了一个实现了GenericInterface
接口的类GenericInterfaceImpl
,它的类型参数是String
。通过调用setValue
方法设置对象中存储的值,再通过调用getValue
方法获取到该值。
泛型方法的创建
除了泛型类和泛型接口,我们还可以创建泛型方法。泛型方法是指在方法声明中使用类型参数的方法。
下面是一个示例代码:
public class GenericMethod {
public <T> void printValue(T value) {
System.out.println(value);
}
}
在上面的代码中,printValue
是一个泛型方法,它的类型参数是T
。我们可以在调用该方法时指定具体的类型。
示例代码:
GenericMethod gm = new GenericMethod();
gm.printValue("Hello"); // 输出: Hello
gm.printValue(123); // 输出: 123
上面的代码创建了一个GenericMethod
对象,并调用了它的printValue
方法,分别传入了String
类型和Integer
类型的参数。泛型方法根据传入的参数类型自动推断出具体的类型参数。
泛型的限定
在使用泛型时,我们可以对类型参数进行限定,以确保泛型对象满足特定的约束条件。我们可以使用extends
关键字来限定类型参数。
下面是一个示例代码:
public class GenericConstraint<T extends Number> {
private T value;
public GenericConstraint(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
在上面的代码中,GenericConstraint
是一个泛型类,它的类型参数T
必须是Number
类或其子类。这样就可以确保只能传入数字类型的参数。
示例代码:
GenericConstraint<Integer> gc = new GenericConstraint<>(123);
int value = gc.getValue();
System.out.println(value);