我如何在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中创建通用方法?的主要内容,如果未能解决你的问题,请参考以下文章

在Java中创建类型的通用实例[重复]

如何在 PHP 中创建通用 DAO 接口?

如何在片段中创建选项卡的示例?

如何使用引导程序和 for 循环在 django 中创建电影片段?

在片段中创建自定义列表视图时出错。必需的活动,找到的片段

在片段中创建自定义列表视图时出错所需活动,找到片段