Java 不兼容类型-使用泛型时找到对象
我遇到了一个问题,下面的循环抛出了一个错误Java 不兼容类型-使用泛型时找到对象,java,Java,我遇到了一个问题,下面的循环抛出了一个错误不兼容的类型:Required:Workstation,Found:java.lang.Object 所有的东西都被类型化了,我不明白为什么它会找到一个对象而不是类型化的对象 private static WorkflowProcess getWorkflowProcessByWorkstationRecursive(Collection<WorkflowProcess> workflowProcesses) { for (Workf
不兼容的类型:Required:Workstation,Found:java.lang.Object
所有的东西都被类型化了,我不明白为什么它会找到一个对象而不是类型化的对象
private static WorkflowProcess getWorkflowProcessByWorkstationRecursive(Collection<WorkflowProcess> workflowProcesses) {
for (WorkflowProcess workflowProcess : workflowProcesses) {
for (Workstation workstation : workflowProcess.getWorkstations()) //ERROR IS HERE
私有静态工作流流程getWorkflowProcessByWorkstationRecursive(集合工作流流程){
for(WorkflowProcess WorkflowProcess:WorkflowProcess){
for(工作站:workflowProcess.getWorkstations())//此处有错误
WorkflowProcess.java
abstract public class WorkflowProcess<WorkstationType extends Workstation> {
private ArrayList<WorkstationType> workstationList = new ArrayList<WorkstationType>();
public ArrayList<WorkstationType> getWorkstations() {
return workstationList;
}
abstract public class ServerWorkflowProcess extends WorkflowProcess<ServerWorkstation> {
abstract public class ServerWorkstation extends Workstation<ServerWorkflowProcess> {
抽象公共类工作流过程{
private ArrayList workstationList=新建ArrayList();
公共阵列列表getWorkstations(){
返回工作站列表;
}
ServerWorkflowProcess.java
abstract public class WorkflowProcess<WorkstationType extends Workstation> {
private ArrayList<WorkstationType> workstationList = new ArrayList<WorkstationType>();
public ArrayList<WorkstationType> getWorkstations() {
return workstationList;
}
abstract public class ServerWorkflowProcess extends WorkflowProcess<ServerWorkstation> {
abstract public class ServerWorkstation extends Workstation<ServerWorkflowProcess> {
抽象公共类ServerWorkflowProcess扩展了WorkflowProcess{
ServerWorkstation.java
abstract public class WorkflowProcess<WorkstationType extends Workstation> {
private ArrayList<WorkstationType> workstationList = new ArrayList<WorkstationType>();
public ArrayList<WorkstationType> getWorkstations() {
return workstationList;
}
abstract public class ServerWorkflowProcess extends WorkflowProcess<ServerWorkstation> {
abstract public class ServerWorkstation extends Workstation<ServerWorkflowProcess> {
抽象公共类ServerWorkstation扩展工作站{
它变得有点复杂,但本质上类层次结构如下所示:
SpecificWorkflowProcess
extendsTypeOfWorkflowProcess
extendsWorkflowProcess
特定工作站
扩展工作站类型
扩展工作站
workflowprocesss
toWorkstation
=一对多问题是您使用的是原始类型WorkflowProcess
。这意味着您得到的API实际上是对普通API的擦除,因此getWorkstations
的返回类型变成了ArrayList
您可以通过以下方式轻松解决此问题:
private static WorkflowProcess getWorkflowProcessByWorkstationRecursive(
Collection<WorkflowProcess<?>> workflowProcesses) {
for (WorkflowProcess<?> workflowProcess : workflowProcesses) {
..
}
}
私有静态WorkflowProcess getWorkflowProcessByWorkstationRecursive(
集合工作流进程:工作流进程){
..
}
}
通过使用通配符,您基本上是在说“我知道这里涉及泛型,但实际上我并不介意集合中的
WorkstationType
type参数是什么”.问题是您使用的是原始类型WorkflowProcess
。这意味着您得到的API实际上是对普通API的擦除,因此getWorkstations
的返回类型变成了ArrayList
您可以通过以下方式轻松解决此问题:
private static WorkflowProcess getWorkflowProcessByWorkstationRecursive(
Collection<WorkflowProcess<?>> workflowProcesses) {
for (WorkflowProcess<?> workflowProcess : workflowProcesses) {
..
}
}
私有静态WorkflowProcess getWorkflowProcessByWorkstationRecursive(
集合工作流进程:工作流进程){
..
}
}
通过使用通配符,您基本上是在说“我知道这里涉及泛型,但实际上我并不介意集合中的
WorkstationType
类型参数是什么”。您必须将泛型参数添加到第二行的workflowProcess
类型中:
private static WorkflowProcess getWorkflowProcessByWorkstationRecursive(Collection<WorkflowProcess> workflowProcesses) {
for (WorkflowProcess<Workstation> workflowProcess : workflowProcesses) {
for (Workstation workstation : workflowProcess.getWorkstations())
私有静态工作流流程getWorkflowProcessByWorkstationRecursive(集合工作流流程){
for(WorkflowProcess WorkflowProcess:WorkflowProcess){
用于(工作站:workflowProcess.getWorkstations())
您必须将通用参数添加到第二行的工作流流程类型中:
private static WorkflowProcess getWorkflowProcessByWorkstationRecursive(Collection<WorkflowProcess> workflowProcesses) {
for (WorkflowProcess<Workstation> workflowProcess : workflowProcesses) {
for (Workstation workstation : workflowProcess.getWorkstations())
私有静态工作流流程getWorkflowProcessByWorkstationRecursive(集合工作流流程){
for(WorkflowProcess WorkflowProcess:WorkflowProcess){
用于(工作站:workflowProcess.getWorkstations())
WorkflowProcess#getWorkstations()
声明?通常,最好先从文件中的第一个错误或警告开始。WorkflowProcess#getWorkstations()
声明?一般来说,最好先从文件中的第一个错误或警告开始。如果我知道列表在某种程度上总是扩展工作站
,是否最好总是执行?扩展工作站
?@Webnet:您已经知道了,因为它在WorkstationType
类型的描述中参数…它不可能是其他任何东西。如果我知道列表在某种程度上总是扩展工作站
,那么最好总是做一个?扩展工作站
?@Webnet:你已经知道了,因为它在WorkstationType
类型参数的描述中…它不可能是任何东西g其他。