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

无法从类中的方法返回泛型类型的数组[重复]

隆长卿
2023-03-14

我正在实现我自己的通用链表类,它有一个名为toArray的实例方法,它可以制作链表的数组副本并返回它。但是,每当我尝试在实例上调用该方法时,我都会收到错误消息“SLList.this不能从静态上下文中引用”。我搜索了一下,有些人说这是因为我没有在实例上调用该方法,但我确实调用了。

下面是该类:

public class SLList<ElemType>{

    private class StuffNode{
        public ElemType item;
        public StuffNode next;
    
        public StuffNode(ElemType i, StuffNode n){
            item = i;
            next = n;
        }
    }
    /** The first item of a list(if it exists) is at sentinel.next*/
    private StuffNode sentinel;
    private int size;

        public ElemType[] toArray(){
           ElemType[] arr =(ElemType[]) new Object[this.size];
           StuffNode ptr = this.sentinel;
           int i = 0;
           while(ptr.next != null){
               arr[i] = ptr.next.item;
               ptr = ptr.next;
               i++;
        }
           return arr;
    }

}

它有一些方法,比如<code>addLast、addFirst</code>它们没有问题。

        public static void main(String[] args){
           SLList<Integer> x = new SLList<>(3);
           x.addLast(4);
           x.addFirst(1);
           ElemType[] arr = x.toArray();
    }

ElemType[]arr=x.toArray()是我不断收到错误消息的行,我使用了一个在线Java可视化工具来确认该方法工作正常,只是返回结果有问题

共有1个答案

凌啸
2023-03-14

你可以这样做:

public class Main2 {
    public static void main(String[] args) {
        SLList<Integer> x = new Main2().new SLList<>(3);
        x.addLast(4);
        x.addFirst(1);
        Integer[] arr = x.toArray();
    }

    public class SLList<ElemType> {
        private class StuffNode {
            public ElemType item;
            public StuffNode next;

            public StuffNode(ElemType i, StuffNode n) {
                item = i;
                next = n;
            }
        }
    
        public SLList(ElemType n) {
            // Some code for constructor
        }
    
        public void addFirst(ElemType n) {
            // Some code
        }

        public void addLast(ElemType n) {
            // Some code
        }

        /**
         * The first item of a list(if it exists) is at sentinel.next
         */
        private StuffNode sentinel;
        private int size;

        public ElemType[] toArray() {
            ElemType[] arr = (ElemType[]) new Object[this.size];
            StuffNode ptr = this.sentinel;
            int i = 0;
            while (ptr.next != null) {
                arr[i] = ptr.next.item;
                ptr = ptr.next;
                i++;
            }
            return arr;
        }
    }
}

或者像这样:

public class Main2 {
    public static void main(String[] args) {
        SLList<Integer> x = new SLList<>(3);
        x.addLast(4);
        x.addFirst(1);
        Integer[] arr = x.toArray();
    }

    // INSERT A STATIC HERE
    public static class SLList<ElemType> {
        private class StuffNode {
            public ElemType item;
            public StuffNode next;

            public StuffNode(ElemType i, StuffNode n) {
                item = i;
                next = n;
            }
        }

        public SLList(ElemType n) {
            // Some code for constructor
        }

        public void addFirst(ElemType n) {
            // Some code
        }

        public void addLast(ElemType n) {
            // Some code
        }

        /**
         * The first item of a list(if it exists) is at sentinel.next
         */
        private StuffNode sentinel;
        private int size;

        public ElemType[] toArray() {
            ElemType[] arr = (ElemType[]) new Object[this.size];
            StuffNode ptr = this.sentinel;
            int i = 0;
            while (ptr.next != null) {
                arr[i] = ptr.next.item;
                ptr = ptr.next;
                i++;
            }
            return arr;
        }
    }
}
 类似资料:
  • 我正在实现我自己的泛型链表类,它有一个名为的实例方法,该方法生成链表的数组副本并返回它。然而,每当我试图在实例上调用该方法时,我总是得到错误消息“sllist.this cannot be referenced from a static context”。我搜索了一下,有些人说这是因为我没有在实例上调用那个方法,但我确实调用了。 下面是类: 它有一些方法,如,它们都没有问题。 是我不断收到错误消

  • 问题内容: 背景 我曾经写过这种方法: 应该这样称呼它: 这很好用(尽管我在研究当前容易出错的问题时在这里的答案中已经看到)。 目前的情况 无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中): 目的是可以这样称呼: 我的评估方法中的代码显然不起作用。的第二个参数应该是Class对象。这导致我: 我的问题 如何获得通用(返回)类型的

  • Java中是否有一种方法可以通过一个方法的声明返回不同的类型? 我希望此方法返回一个对象,并在函数调用时将其转换为正确的类型。这就是我的想法,但它不是这样工作的。我是否需要某种通用返回类型来执行此操作?解决这个问题的最佳方法是什么?

  • 现在我希望以泛型的方式使用这些类。 如何从方法“method1”和“method2”返回泛型类型(可以是猫或狗)。我有几个返回“T extends Animal”的方法,所以最好在方法级别或类级别中声明泛型类型。

  • 我有一个问题,从抽象类中重写泛型方法。 这是我的抽象类: 当我创建类(B)来实现类(a)时,如下所示: 显示了(getData)方法中的以下编译错误: ”“B。getData“(“字符串函数(字符串)”不是“a”的有效重写。getData'('字符串函数(类型)‘)。dart(无效覆盖) 以及返回语句中的此错误: 类型为“String”的值不能从方法'getData'返回,因为它的返回类型为'St

  • 这是我的场景,我有三节课。 这里translate方法返回动物对象,但我需要使用相同的方法返回狗和猫类型,而不需要进行类型转换。我知道我必须在这里使用泛型,但是我如何编辑translate方法来支持泛型,这样我就可以将类类型传递给它的参数,如果使用Cat参数调用它就返回Cat对象,如果使用动物参数调用它就返回动物对象,如果使用Dog参数调用它就返回Dog对象。 例如:-而不是 Cat newCat