首页 > 解决方案 > 如何从接口中获取接口的泛型参数的类

问题描述

我有这个界面:

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 类

我怎样才能让它工作?

标签: javagenerics

解决方案


接口内的类是静态的,您可以从函数中删除默认值,每个类都需要实现它。例子:

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;}
}

推荐阅读