首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Java中将泛型列表转换为泛型数组?

如何在Java中将泛型列表转换为泛型数组?
EN

Stack Overflow用户
提问于 2016-12-03 23:54:30
回答 3查看 2.3K关注 0票数 0

我试图编写一个泛型类来对任意类型的数组进行排序。

第一个排序函数对任何类型的数组进行排序。工作很好。

在第二个排序函数中,我传递了list并尝试将其转换为数组来使用第一个排序函数。但是,当我试图将list转换为泛型类中的数组时,它会引发意外的类型错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

    public class Sort<T extends Comparable>{
         //public T l;
         T tmp;
        public  void sort(T[] l){

        for(int i=0;i<l.length;i++){
           for(int j=i+1;j<l.length;j++){
              if(l[i].compareTo(l[j])>0){
                   tmp=l[i];
                  l[i]=l[j];
                   l[j]=tmp;
              }
            }
        }
                    System.out.println( Arrays.asList(l));
              }
         public  <T extends Comparable>  void sort(List<T> l){
          T[] array = (T[]) new Object[l.size()];
          sort(l.toArray(T[] array));
      // System.out.println(l);
         }   

    public static void main(String[] args){
                Integer[] i={2,4,1,5,3};
                List<String> l = Arrays.asList("c","d","a","e","b");
                Sort s=new Sort();
                //String[] j=l.toArray(new String[l.size()]);
                s.sort(i);
                s.sort(l);

            }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-04 01:02:10

正如n247s所建议的,如果您希望类和方法之间具有一致性,那么它们应该使用相同的参数化类型。

它提出了另一个问题:如果你这样做,你不应该混合橘子和香蕉,因为否则你的那类可能会产生意想不到的结果。假设您在数组或列表中添加了一个可比较对象的组合,这些对象不是设计用来在它们之间进行比较的:StringBooleanCustomClassWhichIsComparable

此外,在将列表转换为数组的方法中,希望在Comparable数组中分配一个Comparable数组。但是您不能这样做,因为所有Object实例都不一定是Comparable实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public  <T extends Comparable>  void sort(List<T> l){
   T[] array = (T[]) new Object[l.size()];
   sort(l.toArray(T[] array));
 }  

你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void sort(List<T> l) {
  T[] array = (T[]) new Comparable[l.size()];
  sort(l.toArray(array));
}

在这两种情况下,您都会有警告,但也没有例外。

下面是建议修改的类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Sort<T extends Comparable<T>> {

    T tmp;


    public void sort(T[] l) {

    for (int i = 0; i < l.length; i++) {
        for (int j = i + 1; j < l.length; j++) {
          if (l[i].compareTo(l[j]) > 0) {
            tmp = l[i];
            l[i] = l[j];
            l[j] = tmp;
          }
        }
    }
      System.out.println(Arrays.asList(l));
    }

    public void sort(List<T> l) {
       T[] array = (T[]) new Comparable[l.size()];
       sort(l.toArray(array));
     }

    public static void main(String[] args) {
      Integer[] i = { 2, 4, 1, 5, 3 };
      Sort<Integer> sortInt = new Sort<Integer>();
      sortInt.sort(i);

      Sort<String> sortString = new Sort<String>();
      List<String> l = Arrays.asList("c", "d", "a", "e", "b");
      sortString.sort(l);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-12-04 00:19:45

这是因为您没有在类级别上暗示任何泛型参数(例如Sort(<)String(>) s = new Sort<>()),这意味着您将不能将它与整数数组一起使用(如果您使用Integer作为泛型类型,则反之亦然)。我要做的是在方法级别上使用泛型参数。(与第二种方法一样)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Sort {

    public  <T extends Comparable> void sort(T[] l){
    T tmp;
    for(int i=0;i<l.length;i++){
       for(int j=i+1;j<l.length;j++){
          if(l[i].compareTo(l[j])>0){
               tmp=l[i];
              l[i]=l[j];
               l[j]=tmp;
          }
        }
    }
                System.out.println( Arrays.asList(l));
          }
     public  <T extends Comparable>  void sort(List<T> l){
      T[] array = (T[]) new Object[l.size()];
      sort(l.toArray(T[] array));
  // System.out.println(l);
     } 
票数 1
EN

Stack Overflow用户

发布于 2016-12-04 00:19:22

问题是第二个<T extends Comparable>方法中的sort。此类型T正在隐藏类类型T

您可以重命名它,但是由于您没有在第一个方法中返回某些内容,所以最快的解决方法就是忽略它,这样编译器就会再次高兴起来。从代码开始,这将转换为如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void sort(List<T> l){
    T[] array = (T[]) new Object[l.size()];
    sort(array);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40956596

复制
相关文章
干货 | 石化产品机器学习价格模型开发和SEI石化产品价格分析体系构建
我们的报告将分为六个部分,第一部分是研究背景与内容。受疫情影响以来,石化行业市场日趋饱和,竞争激烈,同时利润也受到压缩,大部分石化产业都需要转型开拓新市场,但同时又难以获取一些小品种化工品价格。所以我们希望通过机器学习方法实现敏锐捕捉市场化工品价格变化趋势,同时能够推算小品种化工品价格的目标。长此以往,我们希望能够建立属于我们自己的化工品价格体系,为石化行业提供新的机遇。
数据派THU
2023/08/08
3060
干货 | 石化产品机器学习价格模型开发和SEI石化产品价格分析体系构建
产品经理需要会 SQL 吗?会 SQL 对产品有多大帮助?
1.当我们要查数据时,技术人手不够,永远在排期。不如要了只读权限自己干,取数分析一条龙。
蒋川
2021/08/04
2.3K0
产品经理需要会 SQL 吗?会 SQL 对产品有多大帮助?
如何使用Python构建价格追踪器进行价格追踪
学习Python自动化的一个好办法就是构建一个价格追踪器。由于这项任务生成的脚本可以立即投入使用,所以对于初学者来说尤为方便。
用户7850017
2022/12/09
6.1K0
如何使用Python构建价格追踪器进行价格追踪
案例|产品介绍(喜力啤酒价格构成图)
今天要跟大家分享的是产品介绍的一般思路! 产品介绍可能是我们日常做演示文稿需求最频繁的任务之一。 它见诸于课堂演示、新品发布会、业绩报告会以及融资路演的大屏幕上,可是我们日常见到的最多的仍然是仅仅数
数据小磨坊
2018/04/10
1.5K0
案例|产品介绍(喜力啤酒价格构成图)
DNSPod 618直播间产品价格清单,来了!
倒计时7天! DNSPod618直播下周五就要开播啦! 你预约直播了吗? 搞促销 我们是认真的 全部产品都给到了直播专享最低价 服务器 解析 证书 网站建设 通通1元秒杀! 域名免费送! 数量有限 先到先得 赶紧预约直播吧! ↓↓ 详细产品清单 ↓↓ SMB 腾讯云中小企业产品中心     腾讯云中小企业产品中心(简称SMB),作为腾讯云体系中唯一专业服务于8000万中小企业的业务线,致力于为中小微企业提供全面完善贴心的数字化解决方案。产品线覆盖了企业客户从创业起步期、规范治理期、规模化增
腾讯云DNSPod团队
2021/06/11
7440
如何对产品运营情况进行监控
http://groups.google.com/group/dev4server/browse_thread/thread/8a86bb49a561f312
王亚昌
2018/08/03
1.4K0
干货!产品经理职责:如何对产品进行数据分析?
1、Query 这是一切搜索或者类似产品的质量提升源泉没有之一 //至少我是这么认为的。 看了Query你才能知道用户真的在你这里干什么,于是就会理解了“访谈里都是骗人的……”。 举个栗子,访谈用户十个里面9.9个会义正言辞的告诉你,自己使用翻译的时候是多么正经的看论文啦学英语,跟外国友人交流啦看美剧。看看query你就会发现各种杂七杂八少儿不宜的都冒出来了。 Query最简单的一个使用方法就是选取query=>分析用户目的=>评价结果质量,然后针对质量问题进行进一步分析,之后给出解决方案。解决方案后的事情
CDA数据分析师
2018/02/11
1K0
「SQL面试题库」 No_72 指定日期的产品价格
题目介绍: 指定日期的产品价格 product-price-at-a-given-date
不吃西红柿
2023/05/23
2050
关于Elasticsearch Service价格下调和部分折扣调整通知
Elasticsearch Service产品于2020年4月10日进行了价格下调和部分购买折扣调整,具体如下:
腾讯云大数据
2020/04/15
3K2
关于Elasticsearch Service价格下调和部分折扣调整通知
R语言ARMA-GARCH模型金融产品价格实证分析黄金价格时间序列
研究黄金价格的动态演变过程至关重要。文中以黄金交易市场下午定盘价格为基础,帮助客户利用时间序列的相关理论,建立了黄金价格的ARMA-GARCH模型,并对数据进行了实证分析,其结果非常接近。利用该模型可动态刻画黄金价格数据的生成过程,也可帮助黄金产品投资者和生产者做出更加灵活、科学的决策。
拓端
2023/06/05
4680
LeetCode MySQL 1164. 指定日期的产品价格 *
写一段 SQL来查找在 2019-08-16 时全部产品的价格, 假设所有产品在修改前的价格都是 10。
Michael阿明
2021/02/19
8290
图解LeetCode——1475. 商品折扣后的最终价格(难度:简单)
给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。
爪哇缪斯
2023/05/10
2410
图解LeetCode——1475. 商品折扣后的最终价格(难度:简单)
使用 Python 按行和按列对矩阵进行排序
假设我们采用了一个输入的 MxM 矩阵。我们现在将使用嵌套的 for 循环对给定的输入矩阵进行逐行和按列排序。
很酷的站长
2023/02/22
6.1K0
使用 Python 按行和按列对矩阵进行排序
联想产品的国内外价格为什么会有差别? | 拔刺
在这个用过即弃的时代,不要让你的求知欲过期。 今日拔刺: 1、联想产品的国内国外价格为什么会有差别? 2、为什么美国怕华为而不怕三星? 3、目前新能源汽车存在的突出问题是什么? 本文 | 1723字
镁客网
2018/06/05
8460
点击加载更多

相似问题

按价格对产品进行排序

11

Magento :按价格对捆绑产品进行排序

10

按库存和价格对产品进行排序woocommerce

13

sql查询,获取有折扣的当季价格产品

10

如何在App购买中按价格对产品进行排序?

63
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文