当前位置: 首页 > 知识库问答 >
问题:

java知识缺口- OptaPlanner泛型相关-我错过了什么?

乐正瑞
2023-03-14

我正忙于一个OptaPlanner项目,做了一个修改,暴露了我的一个java(泛型)知识缺口。在OptaPlanner框架中,有一组使用Solution_ type的泛型类。在我的项目中,我想让Solution_ extend来自SolutionBase,Solution base是我自己创建的一个类,它拥有一些我想让我的所有解决方案类都拥有的共同特征。

因此,在此之前,我一般地声明了我的业务层类:

public abstract class CommonBusinessLayer<Solution_> extends LoggingMain
public abstract class CommonBusinessLayer<Solution_ extends SolutionBase> extends LoggingMain

但是,在那个业务层的课上,我有一个不知道怎么写的有问题的语句。在改变之前,线

DefaultSolverFactory<Solution_> solverFactory = (DefaultSolverFactory<Solution_>)SolverFactory.createFromXmlResource("some string");

编译得很好(createFromXmlResource-方法是OptaPlanner框架的一部分)。但是现在它不再编译了,因为我让Solution_ inherit继承了SolutionBase。当查看框架的返回类型< code > solver factory . createfromxmlresource(" some string ")时,很明显,我无法使(泛型)返回类型更加特定于类型。

那么我该如何解决这个问题呢?

(FWIW,我意识到我需要更多的java -generics- education,同时订购了Joshua Bloch的《有效的java》一书,但我希望在这里能更快地得到帮助)。

共有1个答案

钦侯林
2023-03-14

声明

public abstract class CommonBusinessLayer<Solution_ extends SolutionBase> extends LoggingMain

Solution_是一个类型变量,与Solution_类无关,实际上从CommonBusinessLayer中的代码中隐藏了Solution_类。

最佳实践是对类型变量使用单个大写字母,通常是< code>T。

将您的课程更改为:

public abstract class CommonBusinessLayer<T extends SolutionBase> extends LoggingMain

如果类型总是< code>Solution_(或其子类),则不要将< code>CommonBusinessLayer设为泛型,而是在代码中使用< code>Solution_并依赖普通继承。

 类似资料:
  • Java 相关知识点汇总,包括 Java 基础、Java 容器、Java 并发、JVM、编程规范、数据结构与算法、数据库、系统设计、设计模式、数据通信、网站架构、备战面试、Github 榜单。

  • 本文向大家介绍JAVA 枚举相关知识汇总,包括了JAVA 枚举相关知识汇总的使用技巧和注意事项,需要的朋友参考一下 Java 枚举 知识点 概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。 在Java中,被 enum 关键字修饰的类型就是枚举类型。形式如下: 如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依

  • 本文向大家介绍简单了解Spring Cloud Alibaba相关知识,包括了简单了解Spring Cloud Alibaba相关知识的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了简单了解Spring Cloud Alibaba相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 官方github地址 Spring Cloud A

  • 我有一个表示数据元类型的接口类型。该参数指示将用于表示数据的Java类型: 我还有一个表示该类型实例的值接口: 所以想象一下,它是一个简单的类型来表示系统中的数字(还有更复杂的动态类型,除了在运行时不存在,这是元编程的乐趣所在): 它告诉调用方在系统中用来表示此类型的Java类型。如果声明的值: 我希望能够具有编译时安全性,使始终返回一个BigDecimal: 这样,如果我需要更改给定类型的Jav

  • 本文向大家介绍深度了解vue.js中hooks的相关知识,包括了深度了解vue.js中hooks的相关知识的使用技巧和注意事项,需要的朋友参考一下 背景 最近研究了vue3.0的最新进展,发现变动很大,总体上看,vue也开始向hooks靠拢,而且vue作者本人也称vue3.0的特性吸取了很多hooks的灵感。所以趁着vue3.0未正式发布前,抓紧时间研究一下hooks相关的东西。 源码地址:vue

  • 问题内容: 我正在使用泛型编写某些东西,令我惊讶的是,我发现这行不通: 那我不能实例化泛型吗?没有任何方法可以做到这一点吗? 问题答案: 是的,这真是令人讨厌。 我使用的解决方法是强制客户端在构造新类时传递类-即 然后您可以使用。