Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将返回类型作为参数传递(无反射?)_Java_Generics_Interface_Return Type - Fatal编程技术网

Java 如何将返回类型作为参数传递(无反射?)

Java 如何将返回类型作为参数传递(无反射?),java,generics,interface,return-type,Java,Generics,Interface,Return Type,我正在尝试创建一个框架 此框架用于在内部解析来自internet的数据,并将其提供给框架(API)的用户 每个示例: 该框架有一个类BasicUser(字符串名,长创建) 此类实现了一个名为“User”的接口,该接口描述了基本行为 每次在某个地方提到这个用户时,我都会调用某种侦听器,给出一个“User”对象 这很好,因为他们可以访问用户,但我希望使用该框架的人能够实现他们自己的用户体验 我不想让他们做一堆包装 使用我的框架的人应该能够将“BasicUser”更改为用户创建的类(实现“user

我正在尝试创建一个框架

此框架用于在内部解析来自internet的数据,并将其提供给框架(API)的用户

每个示例:

  • 该框架有一个类BasicUser(字符串名,长创建)
  • 此类实现了一个名为“User”的接口,该接口描述了基本行为
  • 每次在某个地方提到这个用户时,我都会调用某种侦听器,给出一个“User”对象
这很好,因为他们可以访问用户,但我希望使用该框架的人能够实现他们自己的用户体验

我不想让他们做一堆包装

使用我的框架的人应该能够将“BasicUser”更改为用户创建的类(实现“user”)

应该能够更改“BasicUser”
->不能更改类本身,而是将为新用户创建的对象的类更改为其他“用户”实现)

不使用反射就可以做到这一点吗


是否也可以使用泛型将传递给侦听器的“用户对象”自动强制转换为框架用户提供的类?

在类型的实例中传递,例如

<T> T getResult(T instance) { ... }

Float result = getResult(Float.valueOf(1.0f));
<T> T getResult(Class<T> clazz) { ... }

String result = getResult(String.class);
T getResult(T实例){…}
Float result=getResult(Float.valueOf(1.0f));
或使用返回类型参数化的泛型类型,例如

<T> T getResult(T instance) { ... }

Float result = getResult(Float.valueOf(1.0f));
<T> T getResult(Class<T> clazz) { ... }

String result = getResult(String.class);
T getResult(类clazz){…}
String result=getResult(String.class);
或者使用参数化列表

<T> T getResult(List<T> list) { ... }`.

List<Integer> list = new ArrayList<>();
Integer result = getResult(list);
T getResult(List){…}`。
列表=新的ArrayList();
整数结果=getResult(列表);

传入类型的任一实例,例如

<T> T getResult(T instance) { ... }

Float result = getResult(Float.valueOf(1.0f));
<T> T getResult(Class<T> clazz) { ... }

String result = getResult(String.class);
T getResult(T实例){…}
Float result=getResult(Float.valueOf(1.0f));
或使用返回类型参数化的泛型类型,例如

<T> T getResult(T instance) { ... }

Float result = getResult(Float.valueOf(1.0f));
<T> T getResult(Class<T> clazz) { ... }

String result = getResult(String.class);
T getResult(类clazz){…}
String result=getResult(String.class);
或者使用参数化列表

<T> T getResult(List<T> list) { ... }`.

List<Integer> list = new ArrayList<>();
Integer result = getResult(list);
T getResult(List){…}`。
列表=新的ArrayList();
整数结果=getResult(列表);

你知道什么是接口吗/你检查过它们对你的用例有什么帮助吗?@DarthAndroid是的!我愿意。我使用接口,所以我的框架可以在内部使用它们!我希望用户基本上能够在不包装整个BaseUser的情况下在其周围添加他自己的复杂内容,他们不需要接口-他们永远不会知道“BaseUser”(标准名称和创建日期除外)甚至存在,我希望将他们自己的类返回给他们。因此,如果我读得正确,您有一个框架,该框架具有接受“用户”对象的方法。框架的用户将创建一个类,该类不扩展BaseUser,而是实现User。您的famework有一些方法需要将对象返回给用户,作为它们传入的同一类型,即它们创建的实现用户的类型。这是对的吗?@AAG基本上是这样,是的。我在内部使用
User
来处理很多事情,但目的是让框架用户创建自己的实现,我在内部处理所有的事情,他们从他们的类型中得到很酷的对象。(实现用户)你知道什么是接口吗/你检查过它们对你的用例有什么帮助吗?@DarthAndroid是的!我愿意。我使用接口,所以我的框架可以在内部使用它们!我希望用户基本上能够在不包装整个BaseUser的情况下在其周围添加他自己的复杂内容,他们不需要接口-他们永远不会知道“BaseUser”(标准名称和创建日期除外)甚至存在,我希望将他们自己的类返回给他们。因此,如果我读得正确,您有一个框架,该框架具有接受“用户”对象的方法。框架的用户将创建一个类,该类不扩展BaseUser,而是实现User。您的famework有一些方法需要将对象返回给用户,作为它们传入的同一类型,即它们创建的实现用户的类型。这是对的吗?@AAG基本上是这样,是的。我在内部使用
User
来处理很多事情,但目的是让框架用户创建自己的实现,我在内部处理所有的事情,他们从他们的类型中得到很酷的对象。(实现用户)谢谢,如果我将类存储在字段中,我可以引用它吗?看起来,我最好的计划是当“框架类”被实例化时,给构造函数提供返回类型的类,这样我就可以用同一个字段来实例化它们了?@Jordy-yep。请注意,如果您想传入
instanceOfT.getClass()
,那么将type
classs作为参数传入类型是一种混乱的方法。相反,使用参数化类型调用它,例如:
String result=this.getResult()
@AAG,除非您传递
String
(或
classThank)的实例,所以如果我将类存储在字段中,我可以引用它吗?似乎我的最佳计划是在获取实例化,以便为构造函数提供返回类型的类,以便我可以使用相同的字段以某种方式实例化它们?@Jordy yep。请注意,如果要传入
instanceOfT.getClass()
,使用类型
类作为参数传递类型是一种混乱的方法。相反,使用参数化类型调用它,例如:
String result=this.getResult()
@AAG,除非传递
String
(或
类)的实例