相关疑难解决方法(0)

Java泛型"捕获?"

我正在和一个工作人员一起工作TreeTable时,我需要通过一个

Callback<TreeTableColumn<A, capture of ?>, TreeTableCell<A, capture of ?>>
Run Code Online (Sandbox Code Playgroud)

A是我正在使用的课程,但我不知道如何处理"捕获?"

我试图创造

new Callback<TreeTableColumn<A, ?>, TreeTableCell<A, ?>>
Run Code Online (Sandbox Code Playgroud)

但IDEA显示出警告

setCellFactory(Callback<TreeTableColumn<A, capture<?>>, TreeTableCell<A, capture<?>>>) in TreeTableColumn cannot be applied to (anonymous Callback<TreeTableColumn<A, ?>, TreeTableCell<A, ?>>)
Run Code Online (Sandbox Code Playgroud)

我尝试使用特定的类(如String)而不是"?" 同样,但没有任何帮助.

谁能向我解释如何使用它?

谢谢.

编辑:

我聚集了一点点信息.该CellFactoryTreeTableColumn<S,T>应该是Callback<TreeTableColumn<S,T>,TreeTableCell<S,T>>但是,我与原始类型创建工作(在库)的TreeTableColumn.

使用原始类型回调有效.但有没有其他选择如何解决这个问题?

java generics wildcard capture

21
推荐指数
1
解决办法
2万
查看次数

当涉及类型参数时,无法将列表<List <?>>分配给List <List <?>>

在下面的代码中,get()调用它并将结果分配给类型为的变量List<List<?>>.get()返回a List<List<T>>并在类型参数T设置为的实例上调用?,因此它应该适合.

import java.util.List;

class Test {
    void foo(NestedListProducer<?> test) {
        List<List<?>> a = test.get();
    }

    interface NestedListProducer<T> {
        List<List<T>> get();
    }
}
Run Code Online (Sandbox Code Playgroud)

但IntelliJ IDEA和Oracle的javac1.7.0_45版都拒绝我的代码无效.这是'javac'的错误消息:

java: incompatible types
  required: java.util.List<java.util.List<?>>
  found:    java.util.List<java.util.List<capture#1 of ?>>
Run Code Online (Sandbox Code Playgroud)

为什么这段代码无效,即如果允许则会出错?

java generics

12
推荐指数
2
解决办法
1467
查看次数

了解捕获的转换

我试图了解捕获的转换如何适用于通配符类型.JLS中有一节解释说:

让我们G使用带有相应边界的n类型参数A1,...,An来命名泛型类型声明(第8.1.2节,第9.1.2节)U1,...,Un.

存在从参数化类型G<T1,...,Tn>(第4.5节)到参数化类型的捕获转换 G<S1,...,Sn>,其中,用于1 ? i ? n:

  • 如果Ti是表单的通配符类型参数(第4.5.1节)?,那么它Si是一个新的类型变量,其上限是Ui[A1:=S1,...,An:=Sn],其下限是null类型(第4.1节).

  • 如果Ti是表单的通配符类型参数? extends Bi,那么它Si是一个新的类型变量,其上限是glb(Bi, Ui[A1:=S1,...,An:=Sn]),其下限是null类型.

    glb(V1,...,Vm)被定义为V1 & ... & Vm.

    它是一个编译时间错误,如果,对任何两个类(未接口)ViVj,Vi不是的一个子类Vj,或反之亦然.

  • 如果Ti是表单的通配符类型参数? super Bi,那么它Si是一个新的类型变量,其上限是Ui[A1:=S1,...,An:=Sn],其下限是Bi.

  • 否则,Si …

java generics

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

如何使用CAPTURE绑定创建AST?

我对使用Eclipse JDT创建CAPTURE绑定感兴趣.

我已经阅读了几个捕获转换教程,但是当我复制粘贴示例代码片段时,我永远无法在抽象语法树中找到捕获转换绑定(使用插件ASTView来可视化AST).

如何实现这一目标?

java eclipse capture eclipse-jdt

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

Generic:ArrayList of?在Java中扩展ISomeInterface

我在以下代码中遇到了一些麻烦.

public ArrayList<? extends IEvent> getEventsByDateRange(DateTime minStartTime,  DateTime minEndTime) 
{
    ArrayList<? extends IEvent> returnedEvents = new ArrayList<GoogleEvent>();
    returnedEvents.add(new GoogleEvent());
    return (returnedEvents);
}
Run Code Online (Sandbox Code Playgroud)

这将为"returnedEvents.add(new GoogleEvent());代码行"返回以下编译错误:

方法add(捕获#1-of?extends IEvent)在ArrayList类型中不适用于参数(GoogleEvent)

该课程的声明GoogleEvent如下:

public class GoogleEvent implements IEvent {...}
Run Code Online (Sandbox Code Playgroud)

我知道在Java中使用泛型有一些棘手的部分,因此是通配符,但我似乎无法弄清楚这一点.

谢谢.

java generics arraylist bounded-wildcard

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