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

具有可比接口和通用列表的未检定投放警告

郜驰
2023-03-14

当我使用带有通用或参数化列表的可比接口时,我会收到一个未选中的强制转换警告。我可以使用ObjectList进行比较,但不能使用通用列表。这是我的开发,首先使用ObjectList,然后使用通用列表。

下面是我的ListNode类定义的一个片段:

public class ListNode {
    private Object info;
    private ListNode next;

和我的ObjectList类定义的片段:

public class ObjectList {
    private ListNode list;

我的可比界面:

public interface Comparable {
    public int compareTo(Object o);
}

我的ObjectList类中有一个方法,可以将对象参数与ListNode中的对象进行比较,没有问题。以下是比较代码:

if (((Comparable)o).compareTo(p.getInfo()) == 0)

我现在尝试创建一个泛型列表类,并进行类似的比较。下面是我的通用ListNode类定义的一个片段:

public class ListNode<Type> {
    private Type info;
    private ListNode<Type> next;

还有我的通用列表类定义的一个片段:

public class List<Type> {
    private ListNode<Type> list;

我的通用可比界面:

public interface Comparable<Type> {
    public int compareTo(Type t);
}

当我尝试与ObjectList类进行相同的比较时,我从我的泛型列表类中得到以下未经检查的强制转换警告:

列表java:239:警告:[未选中]未选中的强制转换找到:所需类型:可比

if (((Comparable<Type>)t).compareTo(p.getInfo()) == 0)

有什么想法吗?

下面是一些简化的代码:

public class List<Type> {
    public class ListNode<Type> {
        private Type info;
        private ListNode<Type> next;

        public ListNode() {
            info = null;
            next = null;
        }
    }

    private ListNode<Type> list;

    public List() {
        list = null;
    }

    public boolean contains(Type t) {
        ListNode<Type> p = list;
        while (p != null && (((Comparable<Type>)t).compareTo(p.info) != 0))
            p = p.next;
        return p != null;
    }
}



public interface Comparable<Type> {
        public int compareTo(Type t);
}

将有界参数添加到列表类:

public class List<Type extends Comparable<Type>> {

解决了警告问题。但创建字符串对象列表会产生以下错误:

类型参数java。lang.string不在其范围内

共有2个答案

葛骏
2023-03-14

首先将列表声明更改为下面的代码。这使得参数化类型必须具有可比性。

List<Type extends Comparable<Type>>

然后,您可以直接调用t.compareTo(p.info),无需演员阵容。其次,将ListNode类移动到它自己的文件中。

呼延沈义
2023-03-14

为什么您需要创建自己的可比较的接口,而JDK中已经有一个?无法创建字符串列表的原因很简单,因为字符串没有自己的可比接口。它只实现了java。朗,可比。只需做一些重命名,事情就会清楚:你正在做的是:

public interface MyComparable<Type> {
    public int compareTo(Type t);
}

public class MyList<Type extends MyComparable<Type>> {
  //....
}

然后你试图创建一个MyList

String没有实现MyCompable,当然它会引起问题。

 类似资料:
  • 问题内容: 好的,这是我的问题: 我有一个包含interfaces的列表-和扩展该接口的接口的列表:。我要设置。我不希望使用任何东西或会花费更多内存的东西,因为我正在做的事情已经非常耗费成本。我确实需要能够说。我已经尝试过,但是后来我无法将接口添加到列表中,只能将SubInterfaces 添加到列表中。有什么建议? 我希望能够做这样的事情: RecordKeeper类是包含接口列表的类(NOT

  • 当我在浏览上面的接口时,在阅读了许多相同主题的站点后,我对这些接口的语法不是很清楚。 请考虑以下代码段: 如果每个查询都是可理解的。

  • 我想创建一个类,比如Employee,它实现了通用接口Compariable,并重写了方法equals、hashCode和toString。。。我怎样才能做到呢? 这样可以吗 和

  • 谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜

  • 问题内容: 我的机器上有三个接口,我想使用Java-API来获取mac地址。 我使用此代码。 但是该代码打印出来, 但是错过了eth0 。 我的操作系统Ubuntu,任何帮助。 更新资料 o / p().. blank(empty) 。 Java版本“ 1.7.0_21” Java™SE运行时环境(内部版本1.7.0_21-b11)JavaHotSpot(TM)64位服务器VM(内部版本23.21

  • 假设您有ClassA、ClassB、ClassC和InterfaceA。 ClassA和ClassB实现interfaceA,而classC包含一个列表