Java:从匿名内部类访问局部变量? (优先队列)

2023-11-30

我想用一个PriorityQueue对图进行拓扑排序。为简洁起见,我想使用匿名内部类作为比较器。但是,我需要访问图表g为了确定我正在查看的节点的入度。这可能吗?

    /**
 * topological sort 
 * @param g must be a dag
 */
public static Queue<String> topoSort(DirectedGraph<String, DefaultEdge> g) {
    Queue<String> result = new PriorityQueue<String>(g.vertexSet().size(), 
            new Comparator<String>() {

                DirectedGraph<String, DefaultEdge> g;

                @Override
                public int compare(String arg0, String arg1) {
                    if (g.inDegreeOf(arg0) < g.inDegreeOf(arg1)) {
                        return -1;
                    }
                    if (g.inDegreeOf(arg0) > g.inDegreeOf(arg1)) {
                        return 1;
                    }
                    return 0;
                }
    });

    result.addAll(g.vertexSet());

    return result;
}

更正代码

/**
 * topological sort 
 * @param g must be a dag
 */
public static Queue<String> topoSort(final DirectedGraph<String, DefaultEdge> g) {
    Queue<String> result = new PriorityQueue<String>(g.vertexSet().size(), 
            new Comparator<String>() {          
                @Override
                public int compare(String arg0, String arg1) {
                    if (g.inDegreeOf(arg0) < g.inDegreeOf(arg1)) {
                        return -1;
                    }
                    if (g.inDegreeOf(arg0) > g.inDegreeOf(arg1)) {
                        return 1;
                    }
                    return 0;
                }
    });

    result.addAll(g.vertexSet());

    return result;
}

是的,最终确定:

public static Queue<String> topoSort(final DirectedGraph<String, DefaultEdge> g) {

See 关于最终关键词的最终决定:

匿名本地类

涉及决赛的第二种情况 变量实际上是由 语言语义。在那种情况下, Java 编译器不会让你使用 变量,除非它被声明为final。 这种情况是随着关闭而出现的, 也称为匿名本地类。 本地类只能引用本地的 变量和参数是 宣布最终。

public void doSomething(int i, int j)
{
  final int n = i + j; // must be declared final

  Comparator comp = new Comparator()
  {
    public int compare(Object left, Object right)
    {
      return n; // return copy of a local variable
    }
  };
} 

此限制的原因 如果我们阐明一些观点就会变得显而易见 关于如何实施本地课程。 匿名本地类可以使用 local 变量,因为编译器 自动给班级一个 用于保存副本的私有实例字段 类使用的每个局部变量。 编译器还添加了隐藏 每个构造函数的参数 初始化这些自动创建的 私人领域。因此,本地类 实际上并没有访问本地 变量,但仅仅是它自己的私有变量 它们的副本。唯一的办法就是这个 正常工作是如果本地 变量被声明为final,因此 他们保证不会改变。 有了这个保证, 本地类确信其 变量的内部副本 准确反映当地实际情况 变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:从匿名内部类访问局部变量? (优先队列) 的相关文章

随机推荐

  • 如何给盒子的一部分着色

    我试图显示红色和橙色框的左侧 10 并使背景的其余部分透明 或白色 这可能吗 如果是的话请告诉我该怎么做 谢谢 box background linear gradient to right red orange border 1px bl
  • 如何从 Eclipse 项目中删除 javascript 验证?

    我在我的项目中使用 Eclipse 在搞乱我的 Eclipse 设置时 我打开了 Javascript 支持 现在 eclipse 抱怨 JQuery 库有错误并且不允许我编译该项目 有谁知道如何关闭 javascript 验证吗 我实际上
  • 用Matlab对角展开矩阵

    我有一个矩阵B我想获得一个矩阵C维度的 L k m by L n L and k是输入值 B0 B1 Bk有尺寸m by n 例如 如果我有一个矩阵B 1 1 1 1 1 1 with B0 1 1 B1 1 1 and B2 1 1 以及
  • 根据包含列名的变量从不同列中选择值[重复]

    这个问题在这里已经有答案了 我有一个像这样的 data table col1 col2 col3 new 1 4 55 col1 2 3 44 col2 3 34 35 col2 4 44 87 col3 我想填充另一列matched va
  • 如何在 SoapUI 中访问需要用户名/密码的 wsdl URL?

    如何访问 wsdl URLSOAPUI 这需要用户名 密码 http localhost 8080 ws hello1 wsdl SoapUI 4 6 4 中检索受密码保护的 WSDL 时存在错误 该错误已修复5 0 0 可以从以下地址下载
  • Hashbang 与 URI 解析

    我希望将我的网站移至完全异步文档加载 但我不想使用 请求处理方法 因为 1 我不想断开链接 2 我想要一种更灵活的方式来处理站点获取的 URI 我已经能够为我的网站构建一个轻型 MVC 允许使用通用样式的 url 例如 http ddrew
  • JavaFX 8 Z 缓冲区问题

    我的问题是 JavaFX 3D 中的 Z Buffer 它似乎没有在我的机器上按预期工作 我知道以下问题 重叠的形状 and Z顺序 不过 我确实启用了 Z 缓冲区 并且节点仍然按照它们添加到场景图中的顺序进行渲染 也许我缺少一些依赖项或其
  • 底层的鼠标事件被忽略

    我有两层 AnchorPanes 其中一层与 StackPane 堆叠在一起 所以两个图层都填充了整个场景 问题是 只有顶层接收鼠标事件 这就是场景的构建方式 只有按钮 B 接收点击事件 按钮 A 则不接收 如果我将 B 层设置为鼠标透明
  • PHP中如何连接多个三元运算符? [复制]

    这个问题在这里已经有答案了 我经常使用三元运算符 但我似乎无法将多个三元运算符堆叠在一起 我知道堆叠多个三元运算符会降低代码的可读性但在某些情况下我会 喜欢这样做 这是我到目前为止所尝试过的 foo 1 bar foo 1 1 foo 2
  • Xamarin Forms 中的工具栏项目居中对齐

    我有一个内容页面 添加了工具栏 如下所示 内容页 XamlCompilation XamlCompilationOptions Compile public partial class ChartList ContentPage publi
  • BufferedImage 用透明像素填充矩形

    我有一个 BufferedImage 我试图用透明像素填充一个矩形 问题是 透明像素并没有替换原始像素 而是放在顶部而不执行任何操作 怎样才能完全去掉原来的像素呢 该代码适用于任何其他不透明颜色 public static Buffered
  • 错误 NETSDK1032:RuntimeIdentifier 平台“ios-arm64”和 PlatformTarget“x64”必须兼容

    我在这里已经遇到了这个错误 dotnet 发布错误但我只需创建一个全新的解决方案就可以摆脱它 好吧 这不再是一个选择 因为我现在正在做一个真正的项目 经过我在这些错误中度过的许多天 我能够编译一些项目并将它们分发到 iPhone 上 只是
  • 如何在 RedHat 上的 bash 脚本中不输入密码的情况下切换到 root 用户

    我想通过在代码中指定密码而不是输入密码来在 RedHat 上的 bash 脚本中切换到 root 用户 任何帮助将不胜感激 Thanks 在脚本中以纯文本形式存储密码并不是一个好主意 您可以使用visudo编辑sudoers文件并允许用户使
  • JavaScript 在 AJAX 调用时不起作用

    我有一个页面执行 AJAX 调用并加载整个页面 加载的页面有一些 Javascript 加载时 JavaScript 可以在页面上自行工作 但是当 AJAX 加载时 Javascript 就不起作用 我不知道我错过了什么 加载页面的代码
  • 无法在 Electron Forge 中使用静态文件

    我无法在 Electron 中一致地加载图像 我正在使用 Electron Forge 和 webpack 模板https www electronforge io templates webpack template 我的 src 目录如
  • 响应按键 JavaScript

    如果这是基本的 我很抱歉 但我已经搜索并没有发现任何有效的方法 我想加载一个网页 当该页面加载时 它会显示一个图像 我想让页面自动开始监听向右箭头键的按下 当发生这种情况时 我的脚本中的一个函数将更改图像 我已经通过使用单击时做出反应的按钮
  • SqlDataReader.Read() 总是返回 false

    我有以下情况 using SqlConnection conexao new SqlConnection ConnectionString SqlCommand comando new SqlCommand query conexao co
  • 在循环中异步使用 ReadDirectoryChangesW

    介绍 我正在尝试使用读取目录更改W在循环中异步进行 下面的代码片段说明了我想要实现的目标 DWORD example DWORD error 0 OVERLAPPED ovl 0 ovl hEvent CreateEvent NULL TR
  • VS code c++:“退出代码=3221225785”

    我对 VS code 完全是个新手 而且我只用 C 编码了大约一个月 我尝试了这个简单的程序来确保设置正确 include
  • Java:从匿名内部类访问局部变量? (优先队列)

    我想用一个PriorityQueue对图进行拓扑排序 为简洁起见 我想使用匿名内部类作为比较器 但是 我需要访问图表g为了确定我正在查看的节点的入度 这可能吗 topological sort param g must be a dag p