小编And*_*lav的帖子

为什么调用ISet <dynamic> .Contains()编译,但在运行时抛出异常?

请帮我解释一下这个行为:

dynamic d = 1;
ISet<dynamic> s = new HashSet<dynamic>();
s.Contains(d);
Run Code Online (Sandbox Code Playgroud)

代码编译没有错误/警告,但在最后一行我得到以下异常:

Unhandled Exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'System.Collections.Generic.ISet<object>' does not contain a definition for 'Contains'
   at CallSite.Target(Closure , CallSite , ISet`1 , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2[T0,T1](CallSite site, T0 arg0, T1 arg1)
   at FormulaToSimulation.Program.Main(String[] args) in 
Run Code Online (Sandbox Code Playgroud)

据我所知,这与动态重载分辨率有关,但奇怪的是

(1)如果是s的类型,则HashSet<dynamic>不会发生异常.

(2)如果我使用非泛型接口和接受动态参数的方法,则不会发生异常.

因此,看起来这个问题特别与通用接口有关,但我无法找出导致问题的确切原因.

它是编译器/类型系统中的错误还是合法行为?

c# generics dynamic .net-4.0

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

Java字节代码的"内联汇编"

我正在寻找以下想法的现有实现:假设有人想在普通Java程序中编写"内联汇编"字节代码(大多数相关应用程序将涉及Java中无法提供的invokedynamic指令).一种方法是:

void foo(boolean b) {
    Label l1 = Asm.label();
    Label l2 = Asm.label();

    int i = Asm.no_int();
    Asm._const(0);
    Asm.store(i);
    l1.bind();
    Asm.load(i);
    Asm.push(10);
    Asm.if_cmpge(l2);
    Asm.getstatic("java/lang/System", "out", "Ljava/io/PrintStream");
    Asm.load(i);
    Asm.invokevirtual("java/io/PrintStream", "println", "(I)V");
    Asm.inc(i);
    Asm._goto(l1);
    l2.bind();
    Asm._return();
}
Run Code Online (Sandbox Code Playgroud)

指令被编码为API调用,然后我们需要运行普通的java编译器,然后对字节代码进行后处理并用实际指令替换API调用.

PS我知道ASM框架的ASMifier,它没有解决上述问题.

java bytecode

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

RxJava和FasterXML是否有有效的proguard规则?

现在阻止我在生产中使用kotlin的唯一问题是我找不到正确的proguard文件.

我用过的:

1.Kotlin

2.Anko

3.Jackson-科特林模块

这是警告信息:

:app:proguardRelease
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry
Warning: rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.ConcurrentCircularArrayQueue: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.ConcurrentSequencedCircularArrayQueue: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.MpmcArrayQueueConsumerField: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.MpmcArrayQueueProducerField: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.MpscLinkedQueue: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.SpmcArrayQueueConsumerField: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.SpmcArrayQueueProducerField: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.SpscArrayQueue: can't …
Run Code Online (Sandbox Code Playgroud)

android proguard kotlin fasterxml rx-java

8
推荐指数
2
解决办法
7689
查看次数

标签 统计

.net-4.0 ×1

android ×1

bytecode ×1

c# ×1

dynamic ×1

fasterxml ×1

generics ×1

java ×1

kotlin ×1

proguard ×1

rx-java ×1