小编Joh*_*ica的帖子

JavaFX的ListChangeListener.Change.getRemoved()可以返回非连续的项吗?

问题

ObservableLista 中删除项目时,将触发更改事件,其中getFrom()提供删除的位置并getRemoved()提供已删除的项目列表.文件说:

getRemoved()方法返回已从列表中替换或删除的元素列表.

它没有这样说,但我暗示项目列表是原始列表中的连续子列表.我已经用这个假设编写了很多代码,但是现在我TreeTableView的选择模型遇到了困难,而这种模式并没有这样做.

以一个带有三个"Node"行的简单树表为例.如果我选择那三行......

选择了三行

...然后单击并选择中间行...

在此输入图像描述

...触发的更改事件treeTableView.getSelectionModel().getSelectedItems()如下所示:

{ [TreeItem [ value: Node 1 ], TreeItem [ value: Node 3 ]] removed at 0,  }
Run Code Online (Sandbox Code Playgroud)

在单个更改事件中,它报告从selectedItems列表的索引0中删除了"节点1"和"节点3" .

我原以为该Change对象有两个由next()调用分隔的独立删除事件.第一次调用next()将告诉我"节点1"在索引0处被删除,第二次调用next()将告诉我"节点3"在索引1处被删除.但是不,我得到一个单独的事件,其中两行都列在一旦.

getRemoved()真的可以退回不连续的物品吗?这是我对列表更改事件如何工作的误解,还是一个错误TreeTableView

通常我会犹豫是否会责怪标准库,但这不是我在JavaFX中发现的第一个错误,所以这不是不可想象的.


更新

如果我添加一个调用setShowRoot(false),行为会发生变化.我得到了我所期望的,删除分为两部分:

{ [TreeItem [ value: Node 1 ]] removed at 0, [TreeItem [ …
Run Code Online (Sandbox Code Playgroud)

java javafx observablelist treetableview

18
推荐指数
1
解决办法
807
查看次数

C++ - 返回对象的函数

// Assume class definition for Cat is here.

Cat makeCat() {
    Cat lady = new Cat("fluffy");
    return lady;
}

int main (...) {
    Cat molly = makeCat();
    molly->eatFood(); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是否会出现"免费使用"错误molly->eatFood()

c++

17
推荐指数
3
解决办法
5万
查看次数

string.h和cstring之间的区别?

string.h和之间有什么区别cstring

哪一个应该用于C,哪一个用于C++(如果有的话)?

c c++

17
推荐指数
4
解决办法
2万
查看次数

C中有指针声明的约定吗?

声明在C指针,有2个(编辑:3)的变体:

变式A:
__CODE__

变式B:
__CODE__

变式C:
__CODE__

  • 在A中,间接运算符已附加到该类型.
  • 在B中,间接运算符已预先添加到变量中.
  • 在C中,间接运算符在类型和变量之间自由站立.

声明指针的方式因我阅读的文档类型而异.一些作者似乎偏好某些变体,其他人使用几种变体.

  • 我是否正确地假设不同变体之间的功能没有区别?
  • 如果是,是否存在一个变量应该在C中使用的约定?

c pointers declaration indirection

17
推荐指数
5
解决办法
4551
查看次数

Ansible git clone'Permission Denied'但直接git clone工作

我对Ansible有一个令人不安的问题.我使用当前主机的ssh键在我的环境中设置了一个git克隆:

- name: Add user Public Key
    copy: 
     src: "/Users/alexgrs/.ssh/id_rsa.pub"
     dest: "/home/vagrant/.ssh/id_rsa.pub"
     mode: 0644

- name: Add user Private Key
    copy: 
     src: "/Users/alexgrs/.ssh/id_rsa"
     dest: "/home/vagrant/.ssh/id_rsa"
     mode: 0600

- name: Clone Repository
  git: 
   repo: repo.git
   dest: /home/vagrant/workspace/
   update: true
   accept_hostkey: true
   key_file: "/home/vagrant/.ssh/id_rsa.pub"
Run Code Online (Sandbox Code Playgroud)

如果我vagrant ssh在Vagrant并执行git pull repo它工作.但是当我这样做时,vagrant provision我收到以下错误消息:

stderr: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
Run Code Online (Sandbox Code Playgroud)

我很确定我的公钥不被vangrant规定使用,但我无法检测到原因.

你有没有看到这种问题?

谢谢. …

git ansible

17
推荐指数
2
解决办法
6906
查看次数

函数的增量被+ =覆盖

在三元运算符中调用的方法递增变量并返回布尔值.当函数返回false时,将还原该值.我期望变量为1但是变为0.为什么?

public class Main {
    public int a=0;//variable whose value is to be increased in function
    boolean function(){
        a++;
        return false;
    }
    public static void main(String argv[]){
        Main m=new Main();
        m.a+=(m.function()?1:0);
        System.out.println(m.a);//expected output to be 1 but got a 0 !!!!!
    }
}
Run Code Online (Sandbox Code Playgroud)

java increment variable-assignment ternary

17
推荐指数
2
解决办法
784
查看次数

搜索字符串中未知模式的最有效方法是什么?

我试图找到以下模式:

  • 发生不止一次
  • 长度超过1个字符
  • 不是任何其他已知模式的子串

不知道可能发生的任何模式.

例如:

  • 字符串"男孩倒在钟楼"将返回'ell', 'the b', 'y '.
  • 字符串"男孩倒在钟楼上,男孩倒在钟楼旁边"会回来'the boy fell by the bell'.

使用双for循环,它可以非常低效地强制使用:

ArrayList<String> patternsList = new ArrayList<>();
int length = string.length();
for (int i = 0; i < length; i++) {
    int limit = (length - i) / 2;
    for (int j = limit; j >= 1; j--) {
        int candidateEndIndex = i + j;
        String candidate = string.substring(i, candidateEndIndex);

        if(candidate.length() <= 1) {
            continue;
        }

        if (string.substring(candidateEndIndex).contains(candidate)) …
Run Code Online (Sandbox Code Playgroud)

java algorithm substring

17
推荐指数
2
解决办法
948
查看次数

如何在编译时检查函数是否被调用

我试图在编译时确定是否调用了一个函数.具体来说,我想抛出静态断言失败,如果它是:

template <typename T>
auto Function(T value) -> std::enable_if<someCondition, int>
{
  // this is the function I want to call
}

template <typename... T>
int Function(T...)
{
  // This function should never be called, instead I want
  // a compile-time failure if this is called, because it
  // means the above function wasn't successfully resolved.
}
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是因为无法正确调用Function()正确的条件会导致数千行编译器错误消息,对于那些不熟悉代码库的人来说,这些消息都没有用.

我不希望把一个原因static_assertFunction,因为我们有很多的这些功能,我们有办法,而不是生成Catch-all通过宏,这避免了代码库的不必要的生长,同时产生更多的错误信息帮助版本.

可以这样做吗?

c++

16
推荐指数
1
解决办法
5506
查看次数

是否需要同步构造函数中非线程安全集合的变异?

如果我决定使用非线程安全的集合并同步其访问权限,我是否需要同步构造函数中的任何变异?例如,在下面的代码中,我理解列表的引用对于构造后的所有线程都是可见的,因为它是最终的.但我不知道这是否构成安全发布,因为构造函数中的add不是同步的,而是在ArrayList的elementData数组中添加一个引用,这是非final的.

private final List<Object> list;

public ListInConstructor()
{
    list = new ArrayList<>();
    // synchronize here?
    list.add(new Object());
}

public void mutate()
{
    synchronized (list)
    {
        if (list.checkSomething())
        {
            list.mutateSomething();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java multithreading

16
推荐指数
3
解决办法
675
查看次数

具有命名参数的函数指针?

我最近在C程序中遇到了一个奇怪的语法。

struct connector_agent_api{
    bool (*receive)(slot *s, uint8_t *data, uint8_t length);
}
Run Code Online (Sandbox Code Playgroud)

“接收”是一个函数指针吗?

如果它是一个函数指针,为什么它有命名参数?应该是下面的样子吗?

bool (*receive)(slot *, uint8_t *, uint8_t);
Run Code Online (Sandbox Code Playgroud)

它当然可以编译并在库中使用。我在互联网上进行了大量搜索,并试图证明这种语法的合理性。我仍然不知道为什么这个东西可以编译... :(

c pointers function

16
推荐指数
2
解决办法
643
查看次数