小编Ozy*_*ias的帖子

构造函数模糊与java 8中的varargs

在下面的类中,由于调用模糊,我得到了Java 8的编译错误this().但是,使用Java 6,这个类编译得很好.我知道我可以使用工厂方法重构这个但是对于发生问题的实际类,我强烈希望现在维护当前的API.

任何人都可以想到一种方法来解决歧义而不改变外部API?

public class Vararg8 {

    public Vararg8(final Object... os) {}

    public Vararg8(final boolean b,
                   final String s,
                   final int... is) {}

    public Vararg8() {
        this(true, "test", 4, 5, 6);
    }
}
Run Code Online (Sandbox Code Playgroud)

java

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

使用javac 8编译代码时使用javac 6可以正常编写Java类型错误

我有这个类,这是我在从Java 6移植到Java 8的项目中找到的一些代码的简化:

public class Unification {

    final class Box<A> {}

    final class MyMap<A, B extends Box<? extends A>> {}

    MyMap<?, ?> getMap() {
        return new MyMap<Object, Box<Object>>();
    }

    <A, B extends Box<? extends A>> void setMap(final MyMap<A, B> m) {}

    void compileError() {
        setMap(getMap());
    }

}
Run Code Online (Sandbox Code Playgroud)

这只是一个非常小的例子来展示问题,实际的代码更有意义.这个问题似乎很普遍,因此是一个抽象的例子.核心问题如下:由于某种原因,javac不希望接受带有类型MyMap<?, ?>作为setMap()方法参数的表达式,即使根据我的理解,这应该是良好类型的.

代码使用javac 6编译时没有错误,但是当我使用javac 8时,我得到了这个不起眼的错误消息:

C:\System9\KWS_sparse\sourcesNG\Domain\src\uz\Unification.java (21:9) error: method setMap in class Unification cannot be applied to given types;
required: Unification.MyMap<A,B>
found: Unification.MyMap<CAP#1,CAP#2>
reason: inference variable A has incompatible …
Run Code Online (Sandbox Code Playgroud)

java typeerror

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

使用JavaPoet生成自引用泛型类型

我怎样才能生成以下内容:

class A extends B<A> {}
Run Code Online (Sandbox Code Playgroud)

我坚持构造ParameterizedTypeName来添加超类,我似乎无法在构造之前找到引用A类型的方法...

有什么指针吗?这是可能吗?

java generics self-reference javapoet

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

标签 统计

java ×3

generics ×1

javapoet ×1

self-reference ×1

typeerror ×1