Java如何避免将Class作为泛型对象的参数传递

我写了以下内容:


public class DataContainer<Data>{


    public DataContainer(Class<Data> clazz, String method) throws NoSuchMethodException, SecurityException{


        clazz.getMethod(method);


    }


}

所以我以这种方式创建我的对象:


new DataContainer<SomeClass>(SomeClass.class, "get");

但我希望它看起来更像:


public class DataContainer<Data>{


    public DataContainer(String method) throws NoSuchMethodException, SecurityException{


        Data.getMethod(method);


    }


}

构造调用应如下所示:


new DataContainer<SomeClass>("get");

Data在构造 ADataContainer对象时如何避免传递类?我知道Data不能在运行时操作(new DataContainer<>("get");-> 那什么是数据?)但我听说有解决方案可以解决,不幸的是,我似乎还没有用 google 搜索它。


这也是我的问题的简化版本,我们假设方法是有效的、公共的并且没有参数。


翻阅古今
浏览 279回答 1
1回答

RISEBY

由于类型擦除,您想要使用代码的方式实际上是不可能的。然而,一些通用信息在运行时被保留,即当它可以被反射访问时。一种这样的情况是类层次结构上的泛型,即你可以做这样的事情(我们经常这样做)://Note that I used T instead of Data to reduce confusion//Data looks a lot like an actual class namepublic abstract class DataContainer<T>{&nbsp; public DataContainer(String method) throws NoSuchMethodException, SecurityException {&nbsp; &nbsp; Class<?> actualClass = getActualTypeForT();&nbsp; &nbsp; //use reflection to get the method from actualClass and call it&nbsp; }&nbsp; protected Class<?> getActualTypeForT() {&nbsp; &nbsp; //get the generic boundary here, for details check http://www.artima.com/weblogs/viewpost.jsp?thread=208860&nbsp; }&nbsp;}&nbsp;//A concrete subclass to provide the actual type of T for reflection, can be mostly emptypublic class SomeClassContainer extends DataContainer<SomeClass> {&nbsp; //constructor etc.}类字段或参数应该有类似的东西,尽管我没有测试过。由于类型擦除,您想要使用代码的方式实际上是不可能的。然而,一些通用信息在运行时被保留,即当它可以被反射访问时。一种这样的情况是类层次结构上的泛型,即你可以做这样的事情(我们经常这样做)://Note that I used T instead of Data to reduce confusion//Data looks a lot like an actual class namepublic abstract class DataContainer<T>{&nbsp; public DataContainer(String method) throws NoSuchMethodException, SecurityException {&nbsp; &nbsp; Class<?> actualClass = getActualTypeForT();&nbsp; &nbsp; //use reflection to get the method from actualClass and call it&nbsp; }&nbsp; protected Class<?> getActualTypeForT() {&nbsp; &nbsp; //get the generic boundary here, for details check http://www.artima.com/weblogs/viewpost.jsp?thread=208860&nbsp; }&nbsp;}&nbsp;//A concrete subclass to provide the actual type of T for reflection, can be mostly emptypublic class SomeClassContainer extends DataContainer<SomeClass> {&nbsp; //constructor etc.}类字段或参数应该有类似的东西,尽管我没有测试过。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java