当前位置: 首页 > 知识库问答 >
问题:

java:将int转换为T类型的对象

房项禹
2023-03-14

所以我有一个名为ExpandableArrayList的类,它实现了ListInterface。这个ArrayList填充了Item类型的实例(它表示我的泛型类型T)。class Item实现Comparable,并具有以下属性:String itemNo、String Item Name、double price和int quantity。

一个名为CheckLimit的方法应该检查列表中的任何条目是否具有低于给定限制的数量。如果是,它会将其删除并将其插入列表的前面。

我已经根据项目数量为类项目定义了comareTo,这是我当前对检查限制的实现:

 public void checkLimit (int limit){

/*Type conversions, change limit from int to Object and then to T,   
   in order to use CompareTo: */ 
 Object limitObj = (Integer)limit; 
 T limitT = (T)limitObj; 
 for ( int i=0 ; i< length ; i++ ) { 
    if ( limitT.compareTo(list[i]) > 0){ 

        /* ....... Remove and insert at front ......  */

    } // end if 
    } // end for   
 } // end checkLimit   

它编译正确,但导致运行时异常

Exception in thread "main" java.lang.ClassCastException:
 Item cannot be cast to java.lang.Integer  

然后我尝试将以下方法添加到类项

 /* Added method ConvertToTypeT : 
this method is called by method checkLimit in class
ExpandableArrayList. it receives an integer and creates a temporary
Item Object having this integer as its quantity for comparision purpose only*/ 

public Item convertToTypeT(int limit) { 
  Item converted = new Item (" "," ",0.0,limit);
  return converted;                 } 

并将检查限制更改为:

 public void checkLimit (int limit){
    for ( int i=0 ; i< length ; i++ ) {

    T  limitT =list[i].convertToTypeT(limit);
    if ( limitT.compareTo(list[i]) > 0){ 

        /* ....... Remove and insert at front ......  */

    } // end if 
    } // end for   
 } // end checkLimit  

但即使在我更改公共标识符后也不起作用

ExpandableArrayList.java:255: error: cannot find symbol
    T  limitT =list[i].convertToTypeT(limit);  
                      ^
symbol:   method convertToTypeT(int)
location: interface Comparable<CAP#1>
where T is a type-variable:
T extends Comparable<? super T> declared in class ExpandableArrayList
where CAP#1 is a fresh type-variable:
CAP#1 extends Object super: T from capture of ? super T

那么有没有合适的方法来执行这样的比较呢?考虑到问题中给出了检查限制的标头,它不应该被更改(它应该总是有一个int参数)。

提前非常感谢。

共有1个答案

穆铭晨
2023-03-14

该错误位于您的检查限制方法中:

T limitT = (T)limitObj; 

在这一行中,您尝试将 limitObj(一个整数)转换为类型 T即 Item)。你不能这样做 - 整数是与 Item 完全不同的对象类型,没有办法将整数强制转换为项目(你为什么认为你需要这样做?

如果要检查< code>Item对象的< code>quantity值,请执行以下操作:

public void checkLimit(int limit) {
    for (int i = 0; i < length; i++) {
        if (list[i].quantity < limit) {
            // do whatever you need to do with list[i]
        }
    }
}

list必须是objects的列表,才能工作)。

 类似资料:
  • 问题内容: 好吧,如果我有这段代码 一切正常,但是 运行后给出以下错误(Eclipse没有给出任何错误) 虽然,当我这样做 要么 再没有错了。 为什么必须将其首先转换? 问题答案: 声明对象时,可以通过检查对象是否实际上已强制转换为实例来判断。由于取消装箱约定,可以再次将其强制转换为。之后,该值可以转换为。 但是,没有从Double实例转换为的取消装箱约定,因此,如果您尝试这样做,则运行时将发出。

  • 下面是我的代码:

  • 我只是想说清楚,我的意思是这样的- 另外,如果我访问第一个数组以外的元素,也会遇到同样的问题,即(INT*)arr+13。它会属于越界访问的条款吗?因为我是在第一个数组的边界之外访问的。

  • 我想将char类型转换为int类型,而不丢失有符号的含义,所以我在文件int_test中编写代码。c和它的工作原理: 运行结果是: (有符号字符)a=-2,b=-2 编译日志是: gcc-o int _ test int _ test . c int _ test . c:在函数“main”中:int_test.c:9:15:警告:左移位计数 我的问题是:1.是否有简单有效的转换?2.简单地将ch

  • 问题内容: 我正在使用返回“对象”类型的普通对象的Web服务。调试清楚地表明此对象中存在某种Array,因此我想知道如何将“ Object”转换为Array(或类似对象)? 我尝试了以下方法: 但是没有任何效果。我总是得到一个InvocationTargetException。 我究竟做错了什么? 编辑 : 可悲的是,我不得不删除指向显示Eclipse调试器输出的图像的链接,因为它不再可用。请不要

  • 问题内容: 在Java中,从Object转换为其他类型时,为什么第二行会产生与转换相关的警告,而第一行却没有? 问题答案: 这是因为在执行时,由于 类型Erase 不会 真正 检查对象是否为a 。真的只是将其投射到。例如: __ 有关更多信息,请参见Angelika Langer的Java泛型常见问题解答 ,尤其是类型擦除部分。