小编Jai*_*Jai的帖子

JavaFX属性:重写getBean()方法?

Javadoc ReadOnlyProperty.getBean()表示:

对象getBean()

返回包含此属性的对象。如果此属性未包含在Object中,则返回null。

我注意到,在许多节点中,大多数(如果不是全部)属性都被定义getBean()为覆盖该方法。当然,考虑getBean()到Javadoc中对Java语言的描述,这样做非常有意义。

但是,大多数人(例如您和我)可能会这样做:

ObjectProperty<MyClass> myObj = new SimpleObjectProperty<>();
Run Code Online (Sandbox Code Playgroud)

我们没有覆盖该getBean()方法,没有它,一切似乎都可以工作。那么,是否有一些我们不能通过覆盖而错过的东西getBean()

我已经看到了Javadoc给出的许多覆盖此方法的示例。例如,来自PseudoClass Javadoc:

public boolean isMagic() {
    return magic.get();
}

public BooleanProperty magicProperty() {
    return magic;
}

public BooleanProperty magic =
    new BooleanPropertyBase(false) {

    @Override protected void invalidated() {
        pseudoClassStateChanged(MAGIC_PSEUDO_CLASS. get());
    }

    @Override public Object getBean() {
        return MyControl.this;
    }

    @Override public String getName() {
        return "magic";
    }
};

private static final PseudoClass MAGIC_PSEUDO_CLASS = PseudoClass.getPseudoClass("xyzzy");
Run Code Online (Sandbox Code Playgroud)

我们大多数人甚至都不会使用抽象基类实例化属性(而且很可能甚至不熟悉)。为什么该示例将以这种方式而不是简单地这样做:

public boolean …
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-8

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

Java:使用Stream API在嵌套列表中查找公共项

比方说我有一个List<List<Animal>> animals.此嵌套列表表示每个地方包含动物列表的地点列表.

我需要找出至少出现在两个不同地方的动物类型列表.我知道我可以做正常的循环并做到这一点.有什么办法可以通过Stream API完成吗?

例:

List<List<Animal>> animals = new ArrayList<>();
animals.add(Arrays.asList(new Dog(), new Cat()));
animals.add(Arrays.asList(new Dog(), new Bird()));
animals.add(Arrays.asList(new Bird()));
Run Code Online (Sandbox Code Playgroud)

预期(相当于):

List<Class<? extends Animal>> animalTypes = Arrays.asList(Dog.class, Bird.class);
Run Code Online (Sandbox Code Playgroud)

至于尝试,我只设法将内部列表转换为一组类:

animals.stream().map(place -> place.stream().map(animal -> animal.getClass()).collect(Collectors.toSet()));
Run Code Online (Sandbox Code Playgroud)

更新

没有Stream API的代码:

final List<List<Animal>> animals = new ArrayList<>();
animals.add(Arrays.asList(new Dog(), new Cat()));
animals.add(Arrays.asList(new Dog(), new Bird()));
animals.add(Arrays.asList(new Bird()));

final Map<Class<? extends Animal>, Integer> count = new HashMap<>();

for (final List<Animal> place : animals) {
    final Set<Class<? extends Animal>> uniqueTypes = new HashSet<>();

    for …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

WPF MVVM:设置选项卡视图的 DataContext

我遇到了一种奇怪的绑定行为,这里描述。我做了很多故障排除,我得出的结论是,最可能的问题在于我如何设置DataContext每个选项卡的视图。

我有一个TabControlItemsSource绑定到列表ViewModels

MainView:
<TabControl ItemsSource="{Binding TabList}">
    <TabControl.Resources>
        <DataTemplate DataType="{x:Type vm:Tab1ViewModel}">
            <v:Tab1 />
        </DataTemplate>
    </TabControl.Resources>
...
</TabControl>

MainViewModel:
public ObservableCollection<TabViewModelBase> TabList { get; set; }
public MainViewModel()
{
    this.TabList = new ObservableCollection<TabViewModelBase>();

    // Tab1ViewModel is derived from TabViewModelBase
    this.TabList.Add(new Tab1ViewModel()); 
}
Run Code Online (Sandbox Code Playgroud)

所以,现在MainViewModel有一个列表TabViewModelBase,我相信这是正确的 MVVM 方法。视图 ( Tab1)TabViewModelBase是使用 定义的DataTemplate

这就是问题所在:

Tab1:
<UserControl.Resources>
    <vm:Tab1ViewModel x:Key="VM" />
</UserControl.Resources>
<UserControl.DataContext>
    <StaticResourceExtension ResourceKey="VM" />
</UserControl.DataContext>
Run Code Online (Sandbox Code Playgroud)

我想大多数人也会这样做,但是......这种方法有一些 …

wpf datacontext tabcontrol datatemplate mvvm

0
推荐指数
1
解决办法
2936
查看次数

为什么我的同步方法不能正常工作?

我有一个打印计数器的同步方法,我有 4 个线程,所以我期望计数器的最终值为 400000,因为我的计数器是一个静态变量。

但每次我运行代码时,它都会给我不同的计数器值。

以下是我的代码:

class MyThread implements Runnable{

    private static int counter=1;
    @Override
    public void run() {
        try {
            this.syncMethod();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public synchronized void syncMethod() throws InterruptedException{
        for(int i=0;i<100000;i++){
            System.out.println(Thread.currentThread().getName()+" : "+counter++);
        }
    }
}

public class MyController {
    public static void main(String[] args) throws InterruptedException {
        Runnable r1=new MyThread();
        Runnable r2=new MyThread();
        Runnable r3=new MyThread();
        Runnable r4=new MyThread();
        Thread t1;
        Thread t2;
        Thread t3;
        Thread t4;
        t1=new Thread(r1,"Thread 1");
        t2=new …
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronized synchronized-block

0
推荐指数
1
解决办法
1132
查看次数