java - 在不传递 Class<T> 参数的情况下找出 T.class

标签 java generics

我正在开发一个功能类似于 JTable 的 setDefaultRenderer 的类方法。我想要 Class -特定的格式化程序,将对象转换为适合显示的字符串。

public interface Formatter<T> {
    String format(T value);
}

private Map<Class<?>, Formatter<?>> formatters;

public <T> void addFormatter(Formatter<T> formatter) {
    formatters.put(T.class, formatter);
}

这是我现在的代码,但 Java 不接受 T.class .

error: cannot select from a type variable
        formatters.put(T.class, formatter);
                        ^
1 error

有没有办法在不传递单独的 Class<T> 的情况下写这个?范围?我正在努力避免这种情况。这似乎是多余的。

最佳答案

不,这是不可能的,因为通用 type erasure在 java 。关于泛型类的所有信息在运行时都会丢失,唯一的解决方案是显式地将类作为参数传递。

关于java - 在不传递 Class<T> 参数的情况下找出 T.class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17841688/

相关文章:

django - Django 中的复杂反向查询

swift - 检查泛型类型是否属于类内的特定类型

java - 实例化 map 列表时获取 'Type mismatch: cannot convert from ArrayList<HashMap<String,String>> to List<Map<String,String>>'

c# - 为 Unity 构造函数注入(inject)配置封闭泛型类型

java - 如何编写自己的 ListSelectionEvent?

generics - 我们可以在 Kotlin 中使用中缀泛型方法吗?

java - 为什么 Swing JButton 会截断?

java - 如何在 Spring Integration 中轮询时根据主题过滤电子邮件

java - AsyncTask 中的 NullPointerException

java - 如何仅当我的框架在 Java 屏幕上消失时才执行操作?