使方法泛型和属性

     2023-03-31     173

关键词:

【中文标题】使方法泛型和属性【英文标题】:Making method generic and attributes 【发布时间】:2021-08-13 09:15:19 【问题描述】:

我在 4、5 个屏幕上使用非常相似的方法,基本上在不同对象的列表上做同样的事情。现在我提取了该方法以重用它并使其通用。现在,在制作通用列表时,我面临属性问题。它的属性在成为通用时不再可访问。如何克服这个问题。请注意,对于T 中的所有List 对象,我将拥有这些属性,即"GoodsIssueToPerson", "getProductId()"

我的尝试:

@NonNull
private <T> List<T> getSelectedGoodsList(List<T> objectList) 
    List<T> modifiedGoodsToSellerList = objectList;

    for (int i = 0; i < productSections.size(); i++) 
        ProductRowItem rowItem = productSections.get(i);
        T goodsEntity
                = getGoodsIssuePersonsEntity(rowItem.getProductId(), modifiedGoodsToSellerList);
        Double quantity = parseGermanToDecimal(rowItem.getQuantity());
        if (goodsEntity != null && quantity > 0) 
            setUpdatedQuantity(goodsEntity, quantity);
        
    

    // remove items if quantity is 0
    modifiedGoodsToSellerList.removeIf(x -> x.GoodsIssueToPerson < 1);
    return modifiedGoodsToSellerList;


@Nullable
private <T> T getGoodsIssuePersonsEntity(int productId, List<T> objectList) 
    Optional<T> matchingObject = objectList.stream().
            filter(p -> p.getProductId() == productId).
            findFirst();
    return matchingObject.orElse(null);


private <T> void setUpdatedQuantity(T goodsEntity, List<T> objectList, Double quantity) 
    int indexExistingData = objectList.indexOf(goodsEntity);
    goodsEntity.GoodsIssueToPerson = quantity;
    if (indexExistingData != -1) 
        objectList.set(indexExistingData, goodsEntity);
    

问题快照:如屏幕截图所示x.GoodsIssueToPerson 不可访问,与p.getProductId 等相同。对于我将使用此方法的对象都将具有这些属性。

任何建议,任何帮助将不胜感激。

【问题讨论】:

T 可以是任何东西,所以它没有任何这些方法是有道理的。如果TString,您希望x.GoodsIssueToPerson 是什么?您需要T 必须实现的某种通用接口。 为 T 添加类型绑定,例如T extends YourClass 具有 GoodsIssueToPerson 字段和/或 getProductId 方法。 @HenryTwist 是的,我知道这一点。想知道如何在仍然可以访问属性的同时使其通用。 @roookeee 谢谢 .. 最初我并没有想到它,但我会尝试使用扩展泛型类型并使用基本模型来存储所有字段以供重用。非常感谢。 我同意一个定义良好的界面可以帮助很多 【参考方案1】:

我想扩展我建议的评论

为 T 添加类型绑定,例如T 扩展了具有 GoodsIssueToPerson 字段和/或 getProductId 方法的 YourClass。

虽然这可能适用于您当前的用例,但如果 T 没有公共基类怎么办?不应该仅仅因为选择的抽象而创建继承层次结构 - 它应该是相反的。

这个问题有多种解决方案:

    在所有类上使用interface,从而创建一个通用类型绑定 将Function&lt;T, WantedData&gt; 传递给提取所需数据的通用函数

当您无法修改传递类型的类(例如,它们是框架对象)时,第二个变体很有用。

不过,公共基础 class 并没有错。

【讨论】:

C# 泛型和方法

】C#泛型和方法【英文标题】:C#Genericandmethod【发布时间】:2008-11-1820:16:57【问题描述】:我怎样才能选择好的方法(我在下面的示例中显示了2种不同的方法不起作用)。我使用而不是带有IF和IS的Object类型的变量来完成这项工... 查看详情

为字符串对象属性定义类型。泛型和显式类型之间的区别

】为字符串对象属性定义类型。泛型和显式类型之间的区别【英文标题】:Definingatypeforobjectpropertiesthatarestrings.Differencesbetweengenericandexplicittypes【发布时间】:2020-08-1706:02:49【问题描述】:Playgroundlinkhere我想定义一个函数searchText... 查看详情

泛型和枚举

...类来扩展。泛型类定义的泛型,在整个类中有效,如果被方法是用,那么泛型类对象的明确要操作的具体类型。所有方法类型不确定,那么可以将泛型定义在方法上。public<T>T print(Tt){//& 查看详情

关于泛型和 IEnumerable 的方法重载解决方案

】关于泛型和IEnumerable的方法重载解决方案【英文标题】:MethodoverloadresolutionwithregardstogenericsandIEnumerable【发布时间】:2011-06-2201:18:20【问题描述】:前几天我注意到了,说你有两个重载的方法:publicvoidPrint<T>(IEnumerable<T>... 查看详情

kotlin小知识之泛型和委托(代码片段)

文章目录泛型和委托泛型的基本用法类委托和委托属性类委托委托属性实现一个自己的lazy函数泛型和委托泛型的基本用法Kotlin当中的泛型机制和Java当中的泛型机制还是有异同的所谓泛型就是说在一般的编程模式下面,我们需要给... 查看详情

泛型和从差异类调用重载方法 - 优先级问题[重复]

】泛型和从差异类调用重载方法-优先级问题[重复]【英文标题】:Genericsandcallingoverloadedmethodfromdifferenceclass-precedenceissue[duplicate]【发布时间】:2013-08-1716:57:51【问题描述】:首先,对不起标题,但我想不出更好的...我的问题可以... 查看详情

java:effectivejava学习笔记之优先考虑泛型和泛型方法(代码片段)

Java优先考虑泛型和泛型方法1、优先考虑泛型2、优先考虑泛型方法参考1、优先考虑泛型下面我们举个例子,将他作为泛型化的主要备选对象,换句话说,可以适当的强化这个类来利用泛型。publicclassStackprivateObject[]elem... 查看详情

typeof 泛型和强制类型 [重复]

...布时间】:2019-07-1613:41:30【问题描述】:假设我们有通用方法:publicvoidGenericMethod<T>(Titem)vartypeOf=typeof(T);vargetType=item.GetType();我们使用以下参数调用它:GenericMethod(1)Gen 查看详情

0513泛型和学生信息(代码片段)

...纳总结思想的提升,对于数据处理的范围,参数的类型,方法操作的数据...进行了二次剥离!!! 代码中使用泛型之后,可以极大的提高对于代码的复用性,可移植性,可操作性。1.2泛型格式Java中泛型规定: <自定义无意义英... 查看详情

C# 泛型和类型检查

...问题描述】:我有一个使用IList&lt;T&gt;作为参数的方法。我需要检查T对象的类型并根据它做一些事情。我试图使用T值,但编译器不允许这样做。我的解决方案如下:privatestaticstringBuildClause<T>(IList<T>clause) 查看详情

0513泛型和学生信息(代码片段)

...纳总结思想的提升,对于数据处理的范围,参数的类型,方法操作的数据...进行了二次剥离!!! 代码中使用泛型之后,可以极大的提高对于代码的复用性,可移植性,可操作性。1.2泛型格式Java中泛型规定: <自定义无意义英... 查看详情

java泛型和内部类(代码片段)

...泛型的进一步使用1.泛型类的定义-类型边界Number类2.泛型方法3.泛型中的父子类型4.通配符?通配符上界通配符下界5.泛型的限制三、内部类1.本地内部类2.实例内部类3.静态内部类4.匿名内部类一、泛型的概述1.概念我们都用过J... 查看详情

具有多个结构的泛型和依赖倒置

...库特征/接口的存储库,其中包含从MySQL数据库检索用户的方法。一个依赖于存储库特征/接口的用例,并 查看详情

java泛型和通配符那点事

...看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。 可以在集合框架(Collectionframework)中看到泛型的动机。例如,Map类允许您向一个Map添加任意类的对象,即使最常... 查看详情

不明白java中的泛型和抽象类有啥区别,感觉他们作用一样啊,为啥要用2种方法呢

...一个类只能被继承。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。泛型的应用可以省掉强制类型转换抽象则是对于继承他的... 查看详情

使用泛型和“新”修饰符隐藏父级成员时出现 C# 继承问题

】使用泛型和“新”修饰符隐藏父级成员时出现C#继承问题【英文标题】:IssuewithC#inheritancewhenusingGenericsand\'new\'modifiertohideaparent\'smember【发布时间】:2019-01-1703:50:28【问题描述】:我正在尝试创建具有2个级别的类层次结构其中... 查看详情

为什么要使用泛型?泛型和非泛型对比

 usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespace泛型和非泛型对比{classProgram{staticvoi 查看详情

泛型和链表

泛型http://baike.baidu.com/link?url=tOKzDK_FGcOBfF3Durii5bHNjCGEtqi0j-YoUF1BhhboCvNQiWWiFr3eA-x5xgrosNtosdXHJYlXXfMyMzCM3_链表http://baike.baidu.com/link?url=uGQqIuhYhpfBSSEkOacqFbiEVtMTTzuFf4eL5s6j4sGNZw 查看详情