java - 如何从接口中获取接口的泛型参数的类
问题描述
我有这个界面:
public interface Test<T> {
default Class<?> getT() {
return T.getClass(); < --error
}
}
接下来我有一个实现它的类:
static class ItemService implements Test<Item>{
}
我想从“ItemService”类中获取“Item”类
static ItemService service = new ItemService();
private static void k() {
System.out.println(service.getT());
}
现在一种方法是:
public interface Test<T> {
default Class<?> getT() {
return Type.type;
}
class Type {
public static Class<?> type;
}
}
服务:
static class ItemService implements Test<Item> {
public ItemService() {
Type.type = Item.class;
}
}
它工作正常但有一个问题,当另一个类实现接口时:
static class OrderService implements Test<Order> {
public OrderService() {
Type.type = Order.class;
}
}
我尝试:
static ItemService service = new ItemService();
static OrderService orderservice = new OrderService();
private static void k() {
System.out.println(service.getT());
}
我得到了 Order 类而不是 Item 类
我怎样才能让它工作?
解决方案
接口内的类是静态的,您可以从函数中删除默认值,每个类都需要实现它。例子:
public interface Test<T> {
public Class<T> getT();
}
static class ItemService implements Test<Item> {
public Class<Item> getT() {return Item.class;}
}
static class OrderService implements Test<Order>{
public Class<Order> getT() {return Order.class;}
}
推荐阅读
- shell - 只能从 Unix 中的脚本读取文件
- wpf - 如何将键盘导航焦点传递给 WPF 中生成的 xaml?以及如何退货?
- typescript - TypeScript 枚举值错误 TS2749:'FOO' 指的是一个值,但在这里被用作一个类型。您的意思是“typeof FOO”吗?
- php - 在重力形式上下文中获取 Stripe\Checkout\Session 的内容
- bokeh - 使散景的自定义 TapTool 为全息视图工作
- node.js - 尝试 findAll() 时集合返回空。RESTful 和 Mongodb
- c++ - Atom 编辑器在编译 C++ 代码时出现问题
- queue - 推送模型中的水平扩展消费者
- python-3.x - 带有列表操作的循环的简写
- tinymce - 如何向 TinyMCE 添加一个共同的父级?