小编Kel*_*ung的帖子

不可分裂的分裂器

我试图了解它是如何Spliterator工作的,以及如何设计分裂器.我认识到这trySplit()可能是更重要的方法之一Spliterator,但是当我看到一些第三方Spliterator实现时,有时我会看到他们的分裂器trySplit()无条件地返回null .

问题:

  1. 普通迭代器和Spliterator无条件返回null 之间有区别吗?看起来这样的分裂者似乎击败了分裂.
  2. 当然,有一些合法的分裂器用例有条件地返回null trySplit(),但是有一个无条件返回null的分裂器的合法用例吗?

java java-8 spliterator

11
推荐指数
1
解决办法
893
查看次数

多个通配符边界

假设我有以下课程:

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<?>还是完全不同的东西?

java generics bounded-wildcard

8
推荐指数
1
解决办法
682
查看次数

Enum常量在Java中实现通用接口

假设您有一个通用接口:

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<?>?这样做是完全可行的,因此它可能是以类型安全的方式完成的.

java generics enums interface

7
推荐指数
1
解决办法
3788
查看次数

如何协助非辅助依赖?

假设我有第三方课程如下:

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)

java guice assisted-inject

6
推荐指数
1
解决办法
121
查看次数

没有 persistence.xml 的 JPA

我正在尝试开始使用 Guice Persist 和 JPA,它建议通过 persistence.xml 使用配置。来自以编程方式获取配置的本机 Hibernate 背景,是否有一种简单的方法可以在没有 persistence.xml 文件的情况下配置 JpaPersistModule,或者是否始终必须存在 rump persistence.xml?

如果不存在这样的选项,那么我可能不得不使用 PersistenceProvider (假设“默认”以某种方式解析 persistence.xml )。有关于使用 JPA SPI 的教程吗?

java orm hibernate jpa persistence.xml

5
推荐指数
1
解决办法
7488
查看次数

自动装箱和无效

请注意如何Integer.TYPEInteger.classClass<Integer>,Double.TYPE并且Double.classClass<Double>,并使用自动装箱如何向之间转换intInteger以及doubleDouble.现在的问题是,这是否适用于真正void:Void.TYPEVoid.class都是Class<Void>,但你可以"转换"之间voidVoid

换句话说,假设你有这个界面:

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

java generics autoboxing void

4
推荐指数
1
解决办法
501
查看次数

使用Jackson反序列化为Map

我有一个带有两个属性的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

java json jackson

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