java - 使用泛型将类类型从一个方法传递到另一个方法

标签 java generics types

在我当前正在编写的游戏中,我有一个列表 Collectable我的库存中的对象。当我激活这些对象之一时,有些对象需要另一个 Collectable现在,在我的 UI 中,我显示了所有可能的候选对象 Collectable原始对象可能处理的对象。为此,我检查对象是否是接口(interface)的实例。但是该接口(interface)因对象而异。此 UI 称为 ItemSelector并由主 UI 调用。

我构造了ItemSelector通过使构造函数采用 class<T> selectionCriteria作为参数。

<T> ItemSelector(Class<T> selectionCriteria){
     // ... Do work.
}

但是,这意味着当我创建此类的对象时,我必须专门对 switch case 中可能存在的所有不同可能接口(interface)进行硬编码。根据原始对象的类型进行声明。我想做的是在 Collectable 的每个中都有一个方法对象(Collectable 接口(interface)将有一个 getSelectionCriteriaInterface() 方法,该方法将被具体类覆盖),该方法将返回用作选择标准的接口(interface)。

我该如何实现这一目标。 希望尽快得到答复, 谢谢。

最佳答案

像这样:

interface Collectable {
    ...
    Class<?> getSelectionCriteriaInterface();
}

可能的实现:

public Class<?> getSelectionCriteriaInterface() {
    return MyInterface.class;
}

然后在检查时,类似:

Collection<Collectable> allItems = ...;
Collectable c = ...;

List<Collectable> filtered = allItems.stream()
    .filter(c.getSelectionCriteriaInterface()::isInstance)
    .collect(Collectors.toList());

关于java - 使用泛型将类类型从一个方法传递到另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39722918/

相关文章:

java - 从 Java ResultSet 中删除行而不是从底层数据库中删除行

haskell - Haskell 中存在量化值的列表

php - MySQL:1970 年之前的日期

c# - 为什么C#和VB有泛型?他们提供什么好处?泛型,FTW

java - 具有泛型参数的 Java 方法 - 为什么我不能传递具有作为方法参数子类的泛型参数的对象?

c# - 绑定(bind)泛型方法委托(delegate)时出错 - 签名或安全透明度

Python 花旗骰 : Creating a list with sets. 意外类型

java - Thymeleaf 中的多个 if else 条件

java - Maven/Spring : AopNamespaceUtils NoSuchMethod Error

java - 在两个列表上使用 java 流进行左连接