我如何在Java中创建通用方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何在Java中创建通用方法?相关的知识,希望对你有一定的参考价值。
我有两个条件的方法。
if(urlSendModel.isHasPhoto()) {
ArrayList<InputMediaPhoto> inputMediaPhotos = new ArrayList<>();
for(String photoUrl : urlSendModel.getPhotos()){
inputMediaPhotos.add(new InputMediaPhoto(photoUrl));
}
SendMediaGroup sendMediaGroup = new SendMediaGroup(message.chat().id(),
inputMediaPhotos.toArray(new InputMediaPhoto[0]));
bot.execute(sendMediaGroup);
}
if(urlSendModel.isHasVideo()){
ArrayList<InputMediaVideo> inputMediaVideos = new ArrayList<>();
for(String videoUrl : urlSendModel.getVideos()){
inputMediaVideos.add(new InputMediaVideo(videoUrl));
}
SendMediaGroup sendMediaGroup = new SendMediaGroup(message.chat().id(),
inputMediaVideos.toArray(new InputMediaVideo[0]));
bot.execute(sendMediaGroup);
}
我如何才能创建这样的东西或以另一种方式解决这个问题。
private <T extends InputMedia<T>> void sendMedia(Message message, ArrayList<String> urls) {
ArrayList<T> inputMedia = new ArrayList<>();
for(String url : urls){
inputMedia.add(new T(url));
}
SendMediaGroup sendMediaGroup = new SendMediaGroup(message.chat().id(),
inputMedia.toArray(new T[0]));
bot.execute(sendMediaGroup);
}
我将很高兴任何建议的解决方案。
答案
这里的两个要求都可以通过传入的 class
到方法中。 你的方法的额外细节我就不说了,但是,比如说。
<T> void doSomething(final Class<T> klass, final int length) {
// Replace 'new T[10]'
final T[] array = Array.newInstance(klass, length);
final Constructor<T> constructor = klass.getConstructor();
for (int i = 0; i < length; i++) {
// Replace 'new T()'
array[i] = constructor.newInstance();
}
}
- 注1:
new T()
是由 @Vince Emigh. - 注2.这里不考虑处理,所以不会按原样编译。
Exception
这里不考虑处理,所以不会按原样编译。 - 注3:如果你需要使用 不同 构造函数到没有参数的构造函数,那么接受一个简单的
Function<Object[], T>
它将把你提供的参数转换为该类型的实例。
另一答案
你可以做一些类似于先创建通用类。
public class ClassList<T extends Object>{ private ArrayList<T> list; .... }
// or
public class ClassList<T extends InputMedia>{ private ArrayList<T> list; .... }
然后你可以使用构造函数或setter来影响你的属性列表中的一个值,T
以上是关于我如何在Java中创建通用方法?的主要内容,如果未能解决你的问题,请参考以下文章