自定义对象列表作为具有泛型方法的参数

我在 Java 中使用泛型方法,我想使用自定义对象列表作为参数。


我的主要课程是这样的:


public class Main {


    public static <T> T executeGetRequest(String target, Class<T> resultClass) {


        //MY STUFF

        T result = resultClass.newInstance();

        return result;

    }


    public static void main(String[] args) {

        executeGetRequest("myList", List<myCustomObject>.class); // ERROR HERE

    }

}

我想用作参数 a List<myCustomeObject>。当我使用 时List.class,没有错误,但我不确定结果是否会被转换为myCustomObject.


达令说
浏览 222回答 3
3回答

慕婉清6462132

代码很烂...List<myCustomObject>.class&nbsp;错了只能是&nbsp;List.classList是一个接口,List.class.newInstance();无论如何调用都会抛出异常即使你会做这样的代码:List<myCustomClass> myList = new ArrayList(); &nbsp;Object myResult = executeGetRequest("myList", myList.getClass());你将myResult作为ArrayList班级的实例回来......您需要重新考虑您尝试实现的目标 - 取回myCustomClass对象列表或新实例myCustomClass顺便说一句:在运行时有一个“类型擦除”,并且无法获取ListfromList实现中的对象类型。总之在运行时它总是&nbsp;List<Object>

HUX布斯

如果您总是返回项目列表,则List<T>用作返回类型:public class Main {&nbsp; &nbsp; public static <T> List<T> executeGetRequest(String target, Class<T> resultClass) throws IllegalAccessException, InstantiationException {&nbsp; &nbsp; &nbsp; &nbsp; T item = resultClass.newInstance();&nbsp; &nbsp; &nbsp; &nbsp; List<T> result = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; result.add(item);&nbsp; &nbsp; &nbsp; &nbsp; return result;&nbsp; &nbsp; }&nbsp; &nbsp; public static void main(String[] args) throws InstantiationException, IllegalAccessException {&nbsp; &nbsp; &nbsp; &nbsp; executeGetRequest("myList", Foo.class);&nbsp; &nbsp; }&nbsp; &nbsp; static class Foo {&nbsp; &nbsp; }

蓝山帝景

不要使用Class<T>参数和反射(即Class.newInstance())。使用 aSupplier<T>代替:public static <T> T executeGetRequest(String target, Supplier<T> factory) {&nbsp; &nbsp; // MY STUFF&nbsp; &nbsp; T result = factory.get();&nbsp; &nbsp; return result;}然后,按如下方式调用它:List<myCustomObject> result = executeGetRequest("myList", () -> new ArrayList<>());您甚至可以<>在创建 时使用菱形运算符 ( ) ArrayList,因为这是由编译器从左侧推断出来的(即List<myCustomObject>)。您还可以使用方法引用:List<myCustomObject> result = executeGetRequest("myList", ArrayList::new);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java