Java中怎么通过泛型基类获取class
时间: 2024-05-11 14:16:18 浏览: 83
可以通过使用 TypeReference 类来获取泛型类的 class。例如,如果有一个泛型类如下:
```
public class MyClass<T> {
// ...
}
```
那么可以使用下面的代码获取其中 T 的 class:
```
TypeReference<MyClass<String>> typeRef = new TypeReference<MyClass<String>>() {};
Class<?> clazz = typeRef.get().getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) clazz;
Class<?> typeClass = (Class<?>) parameterizedType.getActualTypeArguments()[0];
```
这样,可以得到 typeClass 为 String.class。
相关问题
用泛型实现一个单例模式基类
在Java中,我们可以使用泛型和构造函数重载来创建一个支持多种类型的单例模式基类。这个设计允许我们创建一个模板化的单例,每个实例都是其指定类型的一个唯一实例。下面是一个简单的示例:
```java
public abstract class SingletonBase<T> {
private static final T INSTANCE;
// 使用静态初始化块保证线程安全
static {
try {
INSTANCE = createInstance(); // 虽然这里是抽象方法,但在实际子类中需要提供具体实现
} catch (Exception e) {
throw new RuntimeException("Error creating instance", e);
}
}
protected abstract T createInstance() throws Exception; // 抽象方法,子类需实现
public static T getInstance() {
return INSTANCE;
}
// 防止直接实例化该类
private SingletonBase() {}
}
// 子类实例化
class ConcreteSingleton extends SingletonBase<ConcreteType> {
@Override
protected ConcreteType createInstance() throws Exception {
return new ConcreteType();
}
}
```
在这个例子中,`ConcreteSingleton`是`SingletonBase`的具体实现,它创建的是`ConcreteType`的单例。通过这种方式,你可以为不同的业务场景提供不同的单例行为。
java泛型类继承自一个类怎么实现
在Java中,如果你想要创建一个泛型类并让它继承自另一个非泛型类,你可以按照以下步骤来实现:
1. **声明基类**:首先,定义非泛型的基类,这是你要继承的类。
```java
public class NonGenericBaseClass {
// 基类的成员变量和方法
}
```
2. **创建泛型类**:接着,声明你的泛型类,它将继承上述基类,并指定类型参数。使用 `<T>` 表示类型参数,你可以根据需要替换 `T` 为所需的任意类型。
```java
public class GenericDerivedClass<T> extends NonGenericBaseClass {
// 泛型类的成员变量,可以使用 T 类型
private T genericField;
// 泛型方法,接收和返回类型都是 T
public void genericMethod(T param) {
//...
}
}
```
在这个例子中,`T` 可以代表任何类型,当你实例化这个泛型类时,会提供一个具体的类型。
```java
GenericDerivedClass<String> derivedInstance = new GenericDerivedClass<>();
```
阅读全文