java - 是否可以在泛型函数中测试类型?

标签 java generics

<分区>

我想制作一个通用函数,将字节数组反序列化为调用者指定的类型。 我觉得调用此类函数的一种真正直观的方式类似于:

byte[255] myData = [...]
String myUnserializedString = new Packet<String>(myData).unpack();

byte[4] myInt = [...]
int myUnserializedInt = new Packet<Integer>(myInt).unpack();

作为用户,这是我希望获得的那种界面。问题是(显然)每种类型都必须以不同的方式反序列化。这意味着 unpack() 方法必须执行某种自反测试以选择正确的方式来解释原始字节。

在尝试为这样一个类编写原型(prototype)后,我开始觉得泛型可能不是那种设计的正确工具。

是吗?

最佳答案

您可以将 Packet 定义为一个接口(interface),并为每种类型的数据提供一个实现。

public interface Packet<T> {  
   T unpack(byte[] data);  
}  

public final class StringPacket implements Packet<String> {  
     public String unpack(byte[] data) {  
         // Implementation...  
     }  
}  

 // Similar classes for other types...

关于java - 是否可以在泛型函数中测试类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5111761/

相关文章:

java - DAO 可以保存状态信息吗

Java 为什么我不能在函数式接口(interface)中使用多重继承

java - java编译器如何处理像 `public interface A extends B<A>`这样的代码

java - 内存泄漏 - 初始化另一个类的位图类型实例变量

java - 如何在我的 eclipse(juno) 项目中包含依赖项类?

generics - kotlin,如何返回泛型类型成员变量

java - 通用接口(interface)与每种类型的接口(interface)

swift - 是否可以将快速通用类型约束为任何闭包

Java Generics Puzzler,扩展类并使用通配符

java - 将列表中的单个字符串按字母顺序排列 - Java