我试图了解它是如何Spliterator工作的,以及如何设计分裂器.我认识到这trySplit()可能是更重要的方法之一Spliterator,但是当我看到一些第三方Spliterator实现时,有时我会看到他们的分裂器trySplit()无条件地返回null .
问题:
Spliterator无条件返回null 之间有区别吗?看起来这样的分裂者似乎击败了分裂.trySplit(),但是有一个无条件返回null的分裂器的合法用例吗?假设我有以下课程:
public class Either<A, B> {
public Object get();
}
Run Code Online (Sandbox Code Playgroud)
Either是一种存储A或B类型的对象的类型. get()检索该对象.
现在的问题是,是否有可能使用泛型改变的方法签名get(),以便返回的类型不只是Object,但A和B的公用超例如,Either<Integer, Long>可以有get()回报Number,一个Either<Deque<T>, Set<T>>能有get()回报Iterable<T>或者Collection<T>,等等.(显然,Either<Foo,Foo>应该有get()回报Foo).
如果这是可能的话,如果我有Either<List<A>, List<B>>,那么最具体的类型get()可以返回什么?它是原始的List,通配符List<?>还是完全不同的东西?
假设您有一个通用接口:
public interface MyInterface<T> {
T doSomething();
}
Run Code Online (Sandbox Code Playgroud)
是否有可能声明一个实现的枚举MyInterface<T>,但每个枚举常量为哪个实现它的不同值T?也就是说,鉴于此枚举:
public enum MyEnum {
FOO,
BAR,
BAZ;
}
Run Code Online (Sandbox Code Playgroud)
我们可以更改它,以便FOO实现MyInterface<Integer>,BAR实现MyInterface<String>和BAZ实现MyInterface<List<MyOtherType>>,并使它成为MyEnum整体实现MyInterface<?>?这样做是完全可行的,因此它可能是以类型安全的方式完成的.
假设我有第三方课程如下:
public class MyObject {
@Inject
public MyObject(Foo foo, Bar bar) { ... }
}
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个像这样的工厂界面:
public interface MyObjectFactory {
public MyObject build(Bar bar);
}
Run Code Online (Sandbox Code Playgroud)
我的想法是,我希望有一个MyObjectFactory构建一个MyObject固定的Foo- 也就是说,实质上是从外部添加构造函数参数的@Assisted注释Bar.当然,手动实现MyObjectFactory总是可行的:
public class MyObjectFactoryImpl implements MyObjectFactory {
@Inject private Provider<Foo> foo;
@Override
public MyObject build(Bar bar) { return new MyObject(foo.get(), bar); }
}
Run Code Online (Sandbox Code Playgroud)
但是,让我们说有条件要求我使用Guice构建MyObject实例 - 例如,方法拦截器.这似乎是"注射注射器"的工作:
public class MyObjectFactoryImpl implements MyObjectFactory {
@Inject private Injector injector;
@Override
public MyObject build(Bar …Run Code Online (Sandbox Code Playgroud) 我正在尝试开始使用 Guice Persist 和 JPA,它建议通过 persistence.xml 使用配置。来自以编程方式获取配置的本机 Hibernate 背景,是否有一种简单的方法可以在没有 persistence.xml 文件的情况下配置 JpaPersistModule,或者是否始终必须存在 rump persistence.xml?
如果不存在这样的选项,那么我可能不得不使用 PersistenceProvider (假设“默认”以某种方式解析 persistence.xml )。有关于使用 JPA SPI 的教程吗?
请注意如何Integer.TYPE和Integer.class都Class<Integer>,Double.TYPE并且Double.class都Class<Double>,并使用自动装箱如何向之间转换int和Integer以及double和Double.现在的问题是,这是否适用于真正void:Void.TYPE和Void.class都是Class<Void>,但你可以"转换"之间void和Void?
换句话说,假设你有这个界面:
public interface Foo<T> {
public T doSomething();
}
Run Code Online (Sandbox Code Playgroud)
实现一类Foo<Integer>是自由返回int其实施的doSomething()作为int将被装箱.同样Foo<Double>回归double.所以,对于a Foo<Void>:因为Void允许的唯一值是null(除非你做了奇怪的反思,这很少被证明是合理的),这是否意味着你可以省略强制性return null,有效地"装箱"了Void?
我有一个带有两个属性的JSON对象:"key"是一个字符串,"value"可以反序列化为Java bean.
{ "key": "foo", "value": "bar" }
Run Code Online (Sandbox Code Playgroud)
问题是,给定一个这样的对象列表,我可以将它反序列化为一个映射吗?
[{"key": "foo1", "value": "bar1"}, {"key": "foo2", "value": "bar2"}] -> Map<String, String>
Run Code Online (Sandbox Code Playgroud)
目前使用Jackson-databind 2.1