RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 680855
Accepted
Direct
Direct
Asked:2020-06-19 05:12:19 +0000 UTC2020-06-19 05:12:19 +0000 UTC 2020-06-19 05:12:19 +0000 UTC

访问具有相同名称的重叠字段

  • 772

下面的代码是工作程序。这里的主要内容:评论//НАЧАЛО СОЗДАНИЯ КОЛЛЕКЦИИ和//КОНЕЦ СОЗДАНИЯ КОЛЛЕКЦИИ. 很明显,我们使用匿名类创建了一个集合,实现了抽象类AbsctractCollection。

问题:如何在不注释掉array位于迭代器实现内部的数组声明(该位置标有注释// Роковая строка (*))的情况下引用数组array:实现本身内部的字段AbstractCollection?调用本身发生在行中:// ЗДЕСЬ (1),// И ЗДЕСЬ (2)。

import java.util.*;

public class Main {
    public static void main(String[] args) {

        // НАЧАЛО СОЗДАНИЯ КОЛЛЕКЦИИ
        Collection<Object> coll = new AbstractCollection<Object>() {

            private final int SIZE = 10;
            private Object[] array = new Object[SIZE];

            @Override
            public boolean add(Object o) {
                int i = 0;
                while (i != SIZE && array[i] != null)
                    i++;
                if (i == SIZE)
                    return false;
                array[i] = o;
                return true;
            }

            @Override
            public Iterator<Object> iterator() {

                Object[] array = {10,20,22,33,48,"Hi People",  // Роковая строка (*)
                                 "Кислотный диджей хэй!",
                                 2.0d, 0, null};

                return new Iterator<Object>() {
                    int k = 0;

                    @Override
                    public boolean hasNext() {
                        return k != SIZE;
                    }

                    @Override
                    public Object next() {
                        return array[k++];    // ЗДЕСЬ       (1)
                    }

                    @Override
                    public void remove() {
                        if (k == 0)
                            return;
                        array[k - 1] = null;   // И ЗДЕСЬ    (2) 
                    }

                };
            }

            @Override
            public int size() {
                return SIZE;
            }

        };
        // КОНЕЦ СОЗДАНИЯ КОЛЛЕКЦИИ

        for (int i = 34; i < 88; i++)
            coll.add(i);

        coll.remove(40);

        System.out.println(coll);
    }
}


//Output:
//[10, 20, 22, 33, 48, Hi People, Кислотный диджей хэй!, 2.0, 0, null]

我想达到的效果也是通过注释掉“致命线”来实现的。相同代码的结果,带有覆盖注释:

Output:
[34, 35, 36, 37, 38, 39, null, 41, 42, 43]

问题伪代码:

Аноним: {

             Поле P //(1)

             Аноним: { 
                            Поле P   //(2)
                            Вызов(P) // вызывается (2)
             }
        }

// Как вызвать P (1) ?

这是我想为我的任务获得的解决方案(给出了一个没有匿名类的示例):

public class Test{

    private String s = "Hello World!";

    public void f(){
        String s = "Strange string";
        class A{
            String s = "You have a small *ick";
            {System.out.println(Test.this.s);}   // Примерно этого хочется.
        }
        new A();
    }

    public static void main(String[] args){
        new Test().f();
    }
}

//Output:
//HelloWorld!

另外:如何String s = "Strange string";在{}类A?


我求求你,不要告诉我你可以做这个,你可以做那个,但是不要调用所需的字段,或者求助于万能的重命名。这个问题很有趣也很复杂。是的,异国情调的需求,但希望了解 Java 语言的工作原理。

如果主要问题或附加问题的答案是“不可能”,那么请解释原因,或参考任何能够得到严格证明的信息来源。

java
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    ЮрийСПб
    2020-06-19T05:46:51Z2020-06-19T05:46:51Z

    理论上,您可以通过在其中创建返回它的方法来获取对外部类实例的引用。这将替代通过名称获取对外部类的引用,因为匿名类没有名称。

    new Outer()
    {
        public Outer getOuter()
        {
            return this;
        }
    
        public void outerMethod()
        {
            new Inner()
            {
                public void innerMethod()
                {
                    //вот и ссылка на внешний класс. Тут или доступ к переменной будет или можно метод вызвать, который будет массив ваш возвращать. Хотя в этом случае и ссылка, вроде, на внешний класс не нужна...
                    getOuter();
                }
            };
        }
    };
    

    在您的特定情况下,您需要以某种方式在外部类中声明一个方法:

    Collection<Object> coll = new AbstractCollection<Object>() {
    
        private Object[] array = new Object[SIZE];
    
        public Object[] getArray() {
            return array;
        }
    }
    

    然后,在内部类中,不是通过名称引用变量,而是调用返回它的方法。

    //Вместо
    //return array[k++];
    return getArray()[k++];
    

    PS 我自己想出了解决方案,然后(3 秒后,在了解将哪个查询驱动到 Google 之后)我找到了从哪里复制代码,因为我自己懒得写 -如何访问“this”参考java中的匿名外部类

    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5