可以说我有一些图形动画代码,我有两个类: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) 使用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 的语法?
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 的问题。任何想法?
我有一个基本的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) 所以我有一个A依赖于第二个的异步操作B.怎样使B A A的延续,你不应该用那么功能的Javascript承诺,或与ContinueWith在.NET TPL?
让我们从Android获取一个scenarion,我有两个服务端点:
码:
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的延续.有人可以帮忙吗?
我想在我的应用程序中创建一个模式,其中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) 假设我有一堆实现 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) 我想使用 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 类扩展和覆盖吗?