java动态指定泛型类型_关于泛型:在java中返回动态类型的方法

如何编写将返回动态类型的方法(如果可以的话)

类似的东西

public X createRequestObject(Class xclass , String url , String username , String password){

X x = Class.forName(xclass.getCannonicalName()).getConstructor(String.class).newInstance(url);

x.setheader("AUTHORIZATION" , createHeader(username,password)

return x

}

然后我可以像

HttpGet httpGet = createRequestObject(HttpGet.class ,"http://wwww.google.com ,"username","password");

or

HttpPost httpPost = createRequestObject(HttpPost.class ,"http://wwww.google.com ,"username","password");

我知道我可以返回一个对象,然后再把它扔掉,但是我不喜欢铸件,所以想知道Java中是否有一个结构可以帮助我完成这个任务。

你到底想做什么?

这篇文章应该有答案:stackoverflow.com/questions/450807/…

这个问题可能重复:stackoverflow.com/questions/2669326/java-generic-return-type更多提示和建议…

简单地,将方法声明为泛型,声明其返回类型及其类:

public T foo(Class clazz, Object... args) {

return null;

}

很明显,参数和我们需要的是不同的。您可以用以下方法实例化新的T:

clazz.newInstance();

对于空构造函数。

对于带参数的构造函数(在本例中是字符串S和对象O):

return x.getConstructor(String.class, Object.class).newInstance("s", new Object());

实际上,多亏了varargs,您可以遍历数组并获取构造函数查找所需的所有类对象。

然后您可以安全地执行以下操作:

String s = foo(String.class,"a","b");

如果要将t约束为HttpRequest的子类,请使用:

public T foo(Class clazz, Object... args)

考虑在这种情况下使用工厂模式。

工厂实现将能够接受您想要的请求类型,并向您提供您需要的请求类型。

The factory method pattern is an object-oriented creational design pattern to implement the concept of factories and deals with the problem of creating objects (products) without specifying the exact class of object that will be created.

这听起来和你想做的完全一样。

+一个很好的计划。对于有限的场景,这是完美的。但是,请注意,对于任意的类,这不起作用。

由于海报是专门尝试与似乎是HTTP请求,这个解决方案应该适合他的需要。不过,它没有使用泛型那么灵活。

当然,这可以避免不必要地使用反射来创建类实例。

@是的,没错。这对这个问题也有好处,应该认真考虑。顺便说一下,欢迎使用堆栈溢出!

@六分之一干杯!在一般情况下,我喜欢你的解决办法。在某些情况下,这种实现可以派上用场。

你在找仿制药:

public T createRequest(Class xclass, ...)

你可以这样做

public T createRequestObject(Class cls, String arg) {

return TypeT;

}

尝试:

public createRequestObject(Class xclass , String url , String username , String password){

}

public extends someSuperclass>  createRequestObject(Class xclass , String url , String username , String password){

}

将返回类型限制为您定义的某个超类的子类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值