小编Nil*_*zor的帖子

Tell,请问原则 - 我应该在这里申请吗?

可以说我有一些图形动画代码,我有两个类:Sprite和SpriteAnimator.SpriteAnimator负责定期移动精灵.Sprite有一个属性可以阻止它移动.

我首先实现了这样的用例:

public class Sprite
{
    public bool Locked;
    public void MoveTo(int x, int y){}
}

public class SpriteAnimator
{
    private List<Sprite> Sprites;
    public void DoMovement()
    {     
        foreach (Sprite sprite in Sprites)
        {
            if (!sprite.Locked) MoveTo(newX, newY); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

......但后来我想起了Tell-not ask原则,我觉得我在问国家,做出决定,然后告诉他们该做什么 - 就像原则禁止我一样.所以我重新编写:

public class Sprite
{
    private bool Locked;
    public void MoveIfNotLockedTo(int x, int y) { ... }
}


public class SpriteAnimator
{
      private List<Sprite> Sprites;
    public void DoMovement()
    {     
        foreach (Sprite sprite in Sprites)
        { …
Run Code Online (Sandbox Code Playgroud)

design-patterns

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

如何在不嵌套调用的情况下串行连接执行两个独立的Observable?

使用RxJava我有一个Observable<A>和一个Observable<B>.我想在发出B第一个(也是唯一的)元素时立即开始订阅A.我知道我可以像这样链接它:

final Observable<A> obsOfA;
final Observable<B> obsOfB;
obsOfA.subscribe(new Action1<A>() {
        @Override
        public void call(A a) {
            obsOfB.subscribe(...)      
        }
});
Run Code Online (Sandbox Code Playgroud)

..但这会导致嵌套语法,一旦我们介绍就会变得丑陋Observable<C>.如何将语法"解包"到更流畅的语言 - 获得更像javascript Promise.then()-flow 的语法?

java rx-java

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

为什么 Android Studio Arctic Fox 无法同步我的项目

Android Studio Arctic Fox 2020.3.1 Patch 2 失败,并出现以下错误idea.log

ERROR - intellij.openapi.progress.Task - java.lang.IllegalStateException: Can't resolve library via LibraryId(name=Gradle: com.google.j2objc:j2objc-annotations:1.3, tableId=com.intellij.workspaceModel.storage.bridgeEntities.LibraryTableId$ProjectLibraryTableId@4b9d4a4e) 
java.lang.RuntimeException: java.lang.IllegalStateException: Can't resolve library via LibraryId(name=Gradle: com.google.j2objc:j2objc-annotations:1.3, tableId=com.intellij.workspaceModel.storage.bridgeEntities.LibraryTableId$ProjectLibraryTableId@4b9d4a4e)
Run Code Online (Sandbox Code Playgroud)

我怀疑所讨论的具体库有点随机。在我从补丁 1 升级到补丁 2 之前,错误提示:

Caused by: java.lang.IllegalStateException: Can't resolve library via LibraryId(name=Gradle: androidx.exifinterface:exifinterface:1.0.0@aar, tableId=com.intellij.workspaceModel.storage.bridgeEntities.LibraryTableId$ProjectLibraryTableId@73f6fd09)
Run Code Online (Sandbox Code Playgroud)

Gradle 同步得很好 - 同步以BUILD SUCCESSFUL in 5s. 绝对是 Android studio 的问题。任何想法?

android-studio

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

在使用控件本身时,如何使用假数据设计时初始化XAML UserControl?

我有一个基本的WinRT XAML UserControl,它有一个依赖属性,如下所示.用户控件显然只在另一个Page或UserControl中使用时才构造设计时.当我使用用户控件本身在设计器中工作时,不会呈现文本"Hello world".在这种情况下,如何让设计器使用数据初始化用户控件?

XAML:

<UserControl
    x:Class="GTWin8.Ui.SimpleBinding"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:GTWin8.Ui"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400"
    x:Name="ThisControl">

    <Grid Background="Black">
        <TextBlock Text="{Binding Path=Message, ElementName=ThisControl}" 
                   HorizontalAlignment="Left" Margin="10,10,0,0" 
                   TextWrapping="Wrap" VerticalAlignment="Top" Height="280" Width="380"/>
    </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

public sealed partial class SimpleBinding : UserControl
{
    public static DependencyProperty MessageProperty = DependencyProperty.Register(
           "Message", typeof(String), typeof(SimpleBinding), new PropertyMetadata(null));

    public String Message
    {
        get { return (String)GetValue(MessageProperty); }
        set { SetValue(MessageProperty, value); }
    }

    public SimpleBinding()
    {
        this.InitializeComponent();
        Message = "Hello world";
    }
}
Run Code Online (Sandbox Code Playgroud)

xaml visual-studio windows-8 winrt-xaml

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

你如何使用RxJava Observables继续?

所以我有一个A依赖于第二个的异步操作B.怎样使B A A的延续,你不应该用那么功能的Javascript承诺,或与ContinueWith在.NET TPL?

让我们从Android获取一个scenarion,我有两个服务端点:

  • 一个用于获取图像的URL
  • 一个用于获取图像本身

码:

private void loadImage(final ImageView imageView) {
    Observable<String> stringObs = getImageUrlAsync();
    stringObs.subscribe(new Action1<String> () {
        @Override
        public void call(String imageUrl) {
            // First async operation done
            Observable<Bitmap> bitmapObs = getBitmapAsync(imageUrl);
            bitmapObs.subscribe(new Action1<Bitmap>() {
                @Override
                public void call(Bitmap image) {
                    // second async operation done
                    imageView.setImageBitmap(image);
                }
            });
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

希望这两个操作嵌套在代码方面,但是它的格式更像是它的行为 - 顺序.

我一直无法找到关于RxJava/RxAndroid中的Observables的延续.有人可以帮忙吗?

java android rx-java rx-android

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

如何返回一个RxJava Observable,保证不会抛出OnErrorNotImplementedException?

我想在我的应用程序中创建一个模式,其中Observable<T>返回的所有对象都有一些默认的错误处理,这意味着订阅者可以使用.subscribe(onNext)重载而不用担心应用程序崩溃.(通常你必须使用.subscribe(onNext, onError)).有没有办法实现这个?

我已经尝试通过使用附加到Observable onErrorReturn,doOnError并且onErrorResumeNext- 没有任何帮助我的情况.也许我做错了,但是rx.exceptions.OnErrorNotImplementedException如果在Observable中发生错误,我仍然会得到.

编辑1:这是发出错误的Observable的示例,我想在某个中间层处理:

Observable.create(subscriber -> {
    subscriber.onError(new RuntimeException("Somebody set up us the bomb"));
});
Run Code Online (Sandbox Code Playgroud)

编辑2:我已经尝试过这段代码来代表消费者处理错误,但我仍然得到OnErrorNotImplementedException:

// obs is set by the method illustrated in edit 1
obs = obs.onErrorResumeNext(throwable -> {
    System.out.println("This error is handled by onErrorResumeNext");
    return null;
});
obs = obs.doOnError(throwable -> System.out.println("A second attempt at handling it"));
// Consumer code:
obs.subscribe(
    s -> System.out.println("got: " + s)
);
Run Code Online (Sandbox Code Playgroud)

java rx-java

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

IntelliJ 可以将属性(get/setter)重构为字段吗?

假设我有一堆实现 javabean 风格的类,并且我想摆脱 getter/setter,而只使用公共字段。有什么方法可以在不破坏编译的情况下使用 IntelliJ 14 有效地重构它?

示例 - 之前:

class Baratheon {
    private String stannis;
    public String getStannis() {
        return stannis;
    }
    public void setStannis(String stannis) {
        this.stannis = stannis;
    }
}

class Lannister {
    public Lannister() {
        Baratheon b = new Baratheon();
        b.setStannis("dead");
    }
}
Run Code Online (Sandbox Code Playgroud)

- 后:

class Baratheon {
    public String stannis;
}

class Lannister {
    public Lannister() {
        Baratheon b = new Baratheon();
        b.stannis = "dead";
    }
}
Run Code Online (Sandbox Code Playgroud)

java intellij-idea

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

是否可以使用mockito 实现单个 void 方法的主体?

我想使用 Mockito 重写类的单个 void 方法的实现。其他方法应该被存根。

我已经尝试过类似的方法,但它无法编译java.lang.Void != void

MyObj obj = mock(MyObj.class);
doAnswer(new Answer<Void>() {
    @Override
    public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
        return null;
    }
}).when(obj.myMethod(any(String.class)));
Run Code Online (Sandbox Code Playgroud)

没有“doInvoke”或类似的东西吗?

在模拟扩展类之前我必须求助于标准 Java 类扩展和覆盖吗?

java mockito

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