>
> 【痕迹】QQ+微信朋友圈和聊天记录分析工具
>
> (1)纯Python语言实现,使用Flask后端,本地分析,不上传个人数据。
>
> (2)内含QQ、微信聊天记录保存到本地的方法,真正实现自己数据自己管理。
>
> (3)数据可视化分析QQ、微信聊天记录,提取某一天的聊天记录与大模型对话。
>
> 下载地址:https://www.alipan.com/s/x6fqXe1jVg1
>
基本原理
在Java中,泛型是一种强大的特性,它允许我们编写更为灵活和可重用的代码。泛型类型T通常用于方法或类中,以提供类型安全。然而,泛型在运行时是被擦除的,这意味着在运行时我们无法直接获取一个泛型类型的类实例。但是,有一些技巧和方法可以帮助我们间接地获取泛型类型的类实例。
代码示例
示例1:使用Class对象
public class GenericClass {
private Class type;
public GenericClass() {
type = (Class)getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
type = (Class)((ParameterizedType)type).getActualTypeArguments()[0];
}
}
public Class getType() {
return type;
}
}
在上面的示例中,GenericClass
是一个泛型类,它通过反射获取其泛型参数T的Class
对象。注意,这需要泛型参数T是类类型。
示例2:使用TypeToken
public class TypeToken {
private final Type type;
public TypeToken() {
type = getSuperclassTypeParameter(getClass());
}
private Type getSuperclassTypeParameter(Class clazz) {
Type genericSuperclass = clazz.getGenericSuperclass();
if (! (genericSuperclass instanceof ParameterizedType)) {
return null;
}
return ((ParameterizedType) genericSuperclass).getActualTypeArguments()[0];
}
public Type getType() {
return type;
}
}
这个示例使用了TypeToken
类来获取泛型类型参数。TypeToken
是一个静态内部类,它持有其外部类的泛型类型参数。
示例3:使用TypeReference
public class TypeReference extends TypeToken {
private Type type;
public TypeReference() {
type = getSuperclassTypeParameter(getClass().getSuperclass());
}
}
TypeReference
是TypeToken
的一个扩展,它允许我们获取更复杂的类型参数,例如泛型数组或泛型嵌套。
注意事项
- 泛型类型参数在运行时是被擦除的,因此我们不能直接获取其
Class
对象。 - 使用反射和类型令牌(Type Tokens)可以间接获取泛型类型参数的
Class
对象。 - 泛型类型参数的获取通常需要一些额外的类和方法,例如
TypeToken
和TypeReference
。 - 泛型类型参数的获取可能会涉及到一些复杂的反射操作,这可能会影响性能。
结论
虽然Java泛型在运行时被擦除,但通过一些技巧和方法,我们仍然可以间接地获取泛型类型的类实例。这在编写需要类型信息的框架或库时非常有用。然而,开发者应当谨慎使用这些技术,因为它们可能会增加代码的复杂性和潜在的性能问题。理解泛型的工作原理和限制对于编写高效且安全的Java代码至关重要。
>
> 【痕迹】QQ+微信朋友圈和聊天记录分析工具
>
> (1)纯Python语言实现,使用Flask后端,本地分析,不上传个人数据。
>
> (2)内含QQ、微信聊天记录保存到本地的方法,真正实现自己数据自己管理。
>
> (3)数据可视化分析QQ、微信聊天记录,提取某一天的聊天记录与大模型对话。
>
> 下载地址:https://www.alipan.com/s/x6fqXe1jVg1
>