在ObjectiveC.swift从标准库文件包含大约228行代码下面几行:
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
Run Code Online (Sandbox Code Playgroud)
open var在这种情况下意味着什么,或者open一般来说关键字是什么?
假设我们有一个IntFunction返回整数数组的变量:
IntFunction<int[]> i;
Run Code Online (Sandbox Code Playgroud)
使用Java 8泛型,可以使用如下构造函数引用初始化此变量:
i = int[]::new
Run Code Online (Sandbox Code Playgroud)
Java编译器如何将其转换为字节码?
我知道对于其他类型,例如String::new,它可以使用invokedynamic指向String构造函数的指令java/lang/String.<init>(...),这只是一个具有特殊含义的方法.
这对数组有什么用处,看到有构造数组的特殊指令?
这可能是一个愚蠢的问题,但我有点迷失java Logger
private static Logger logger = Logger.getLogger("order.web.OrderManager");
logger.info("Removed order " + id + ".");
Run Code Online (Sandbox Code Playgroud)
我在哪里可以看到日志?此引用来自java.util.logging.Logger库:
在每次日志记录调用时,Logger最初会根据记录器的有效日志级别对请求级别(例如SEVERE或FINE)执行廉价检查.如果请求级别低于日志级别,则日志记录调用立即返回.
在通过此初始(廉价)测试后,Logger将分配一个LogRecord来描述日志消息.然后,它将调用过滤器(如果存在)以更详细地检查是否应该发布记录.如果通过它,则将LogRecord发布到其输出Handlers
这是否意味着如果我有3个request level日志:
logger.log(Level.FINE, "Something");
logger.log(Level.WARNING, "Something");
logger.log(Level.SEVERE, "Something");
Run Code Online (Sandbox Code Playgroud)
我log level是严重的,我可以看到所有三个日志,如果我log level是警告,那么我看不到严重日志,这是正确的吗?我该怎么设置log level?
使用简单try/finally块编译以下代码时,Java Compiler将生成以下输出(在ASM Bytecode Viewer中查看):
码:
try
{
System.out.println("Attempting to divide by zero...");
System.out.println(1 / 0);
}
finally
{
System.out.println("Finally...");
}
Run Code Online (Sandbox Code Playgroud)
字节码:
TRYCATCHBLOCK L0 L1 L1
L0
LINENUMBER 10 L0
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
LDC "Attempting to divide by zero..."
INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
L2
LINENUMBER 11 L2
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
ICONST_1
ICONST_0
IDIV
INVOKEVIRTUAL java/io/PrintStream.println (I)V
L3
LINENUMBER 12 L3
GOTO L4
L1
LINENUMBER 14 L1
FRAME SAME1 java/lang/Throwable
ASTORE 1
L5
LINENUMBER 15 L5
GETSTATIC java/lang/System.out : …Run Code Online (Sandbox Code Playgroud) 我有一个使用EF Core的ASP.Net Core应用程序.
我使用ASP.Net Identity并为我的应用程序的实体共享相同的DBContext.
我已将连接字符串设置为Azure SQL数据库,以使MultipleActiveResultSet = True.
它可以工作一两天,但最终失败并出现错误:
该连接不支持MultipleActiveResultSets.
我不认为MARS是真正的问题,因为它在前两天起作用了.
我正在使用ASP.Net Core的内置DI来设置我的DbContext.
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(appDbContextConnectionString));
Run Code Online (Sandbox Code Playgroud)
我的理解是上面的DbContext的默认生命周期是Transient(每个Web请求).
是否可以与ASP.Net Identity共享相同的DBContext,或者我应该为我的应用程序的实体分别使用一个DBContext,指向相同的数据库?
我不知道这是EF Core,ASP.Net Core还是SQL Azure配置的问题.
我目前正在为自定义编程语言开发一个集合库.我已经有了几种数据类型(Collection,List,Map,Set)和它们的实现(可变和不可变),但到目前为止我所缺少的是hashCode和equals.虽然列表没有问题,因为它们是有序集合,但它们对集合和地图起着特殊的作用.如果两个集合具有相同的大小和相同的元素,则它们被认为是相等的,并且集合维护它们的顺序不应该在它们的相等性上有所不同.由于equals-hashCode-contract,hashCode实现还必须反映这种行为,这意味着具有相同元素但排序不同的两个集合应具有相同的哈希码.(这同样适用于地图,这在技术上是一组键值对)
示例(伪代码):
let set1: Set<String> = [ "a", "b", "c" ]
let set2: Set<String> = [ "b", "c", "a" ]
set1 == set2 // should return true
set1.hashCode == set2.hashCode // should also return true
Run Code Online (Sandbox Code Playgroud)
我如何实现一个相当好的哈希算法,hashCode上面例子中的s返回相同的值?
众所周知,HotSpot JVM使用并发的Mark-and-Sweep G arbage C ollector来释放堆上未使用的对象.从某种意义上说,这是有用的,程序员在编写程序时不必处理内存,但偶尔会出现"GC延迟",释放所有未使用的对象.
同样地,新的SWIFT编程语言还利用被称为ARC的自动存储器管理系统,它与工作甲 utomatic ř eference Ç ounting.这种垃圾收集的问题是循环引用,必须由程序员专门处理,weak并unowned引用以避免内存泄漏.
但这两者之间还有其他重大差异吗?哪种情况比另一种更好或更差?
java garbage-collection mark-and-sweep automatic-ref-counting swift
考虑以下两个类:
public interface Foo<T>
{
public T moo();
}
public class IntFoo implements Foo<Integer>
{
public int moo()
{
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
此代码将产生错误,表示与重写方法的返回类型不兼容.严格来说,这是事实,因为并不直接相等.但是,我们都知道可以使用auto(un)boxing将它们隐式转换为彼此.更少知道的是编译器在此示例中生成桥接方法:publicintmoointIntegerintInteger
public class IntFoo implements Foo<Integer>
{
public <synthetic> <bridge> Object moo()
{
return this.moo(); // upcast
}
public Integer moo() {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
必须这样做是因为JVM在解析方法时区分返回类型,并且由于擦除了返回类型Foo.moois Object,编译器生成了具有与方法相同签名的桥接方法.
我想知道为什么这对原始多态返回类型也不起作用:
public class IntFoo implements Foo<Integer>
{
public <synthetic> <bridge> Object moo()
{
return Integer.valueOf(this.moo());
}
public …Run Code Online (Sandbox Code Playgroud) 假设我有以下类层次结构:
interface Collection<E>
{
Collection<E> $plus(E element)
}
interface MutableCollection<E> extends Collection<E>
{
@Override
MutableCollection<E> $plus(E element)
}
interface Set<E> extends Collection<E>
{
@Override
Set<E> $plus(E element)
}
interface MutableSet<E> extends Set<E>, MutableCollection<E>
{
@Override
default MutableSet<E> $plus(E element)
{
// ... implementation
}
}
abstract class AbstractArraySet<E> implements Set<E>
{
// ... no $plus(...) implementation
}
class ArraySet<E> extends AbstractArraySet<E> implements MutableSet<E>
{
// ... no $plus(...) implementation
}
Run Code Online (Sandbox Code Playgroud)
如您所见,只有MutableSet该类提供了该$plus方法的实现.在测试用例中,我在类型的实例上调用此方法ArraySet.测试总是在CI环境中传递,而它总是AbstractMethodError在我的本地环境中失败.在这两种情况下,我都在使用Gradle(2.7).
java interface abstract-methods java-bridge-method default-method
似乎在Java 9中删除了包中的SharedSecrets和JavaLangAccess类sun.misc.
Java 9中是否有替代这些类提供的功能?
java ×8
swift ×2
algorithm ×1
arrays ×1
asp.net-core ×1
declaration ×1
hash ×1
interface ×1
java-8 ×1
java-9 ×1
javac ×1
jvm ×1
modifier ×1
polymorphism ×1
primitive ×1
return-type ×1
set ×1
swift3 ×1
syntax ×1
try-finally ×1