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

java中的通用方法-无法解析T中的方法“某种方法”

狄玉书
2023-03-14

我对Java中泛型的概念不熟悉。我有一个泛型方法,它的返回类型也是泛型。

我收到此错误,< code >无法解析T中的方法“getAa”。两个类都有这个成员变量,但是java并不理解,因为sub方法返回的是这个对象的一般列表。有没有办法改掉这个错误?

下面是我的代码

class A {
    int aa;
    int bb;

    int getAa() {
        return 1;
    }

}

class B {
    int aa;
    int cc;

    int getAa() {
        return 1;
    }
}
class C {
    private <T> T genericMethodName(String s, Class<T> objectType) {
        List<T> AlistOrBlist = method which returns a list of objects of A or B
        AlistOrBlist = AlistOrBlist.stream()
                                    .filter(record -> record.getAa().equals(""))
                                    .collect(Collectors.toList());
        
        return AlistOrBlist.get(0);
    }
}

共有1个答案

冀翰翮
2023-03-14

这里一个简单的方法是让< code>A和< code>B从一个声明< code>getAa()方法的公共父类继承。这可能是一个简单的接口。

但是,如果 AB 必须保持不相关,则可以使调用方发送适用于 T 的具体类型的“getter”函数。

private <T> T genericMethodName(String s, ToIntFunction<T> mapper) {
    List<T> AlistOrBlist = method which returns a list of objects of A or B
    AlistOrBlist = AlistOrBlist.stream()
            .filter(record -> mapper.applyAsInt(record) == 0)
            .collect(Collectors.toList());

    return AlistOrBlist.get(0);
}

如果您在解析< code>AlistOrBlist的调用中使用< code>objectType,您仍然可以接受它。如果< code>getAa()返回不同于< code>int的类型,则可以将< code>mapper键入为< code >函数

你这样称呼它:

A result = c.genericMethodName("param", A::getAa);
B result = c.genericMethodName("param", B::getAa);
 类似资料:
  • 我试图构建一个通用方法,它将作为参数并处理一些信息。 但不幸的是,它不能像我希望的那样工作。也许你有一些建议来改进我的代码并防止错误。 我在调用: 无法在 我在和调用: 无法解析方法 无法解析方法 我需要在方法中使用的枚举都具有相同的结构。 例如,其中一个看起来像这样: 我知道我可以通过使用 但我的方法不会是通用的。我想对我的任何枚举使用此方法。

  • 我有一个java项目,我正在使用Allure生成测试报告。我发现了这个问题,需要使用以下代码重命名我的测试: 我已经从下面导入了Allure生命周期: 并使用以下依赖项: 但是,这句话很有诱惑力。getLifecycle()它正在抱怨无法解析“Allure”中的方法“getLifecycle”。 如何修复错误?

  • 我是android开发的新手,正在尝试将recycler视图与setAdapter绑定,但遇到了以下错误“无法解析'ConstraintLayout'中的方法'setAdapter'” 我的主要活动。java代码是: 我的主要目标是使用ActivityMainBinding将recyclerView与setAdapter绑定 这就是我出错的地方- 它告诉我重命名引用,这到底意味着什么? 这项活动很

  • 我试图使用for循环迭代一系列的日期,我打算使用plusDays增加开始日期,但是我得到了“Canland resolve method plusDays in date”。下面是我的代码:

  • 我希望使用getter获取数据库的值。首先,我创建了user.java: 那么我已经创建了userRepository.java: 这是我尝试获取值的服务: 但我得到的错误是无法解析“optional”中的方法“get name”。为什么?

  • 我试图在Android Studio中创建Ekart Adnroid应用程序,但无法解决此错误firebaseInstanceIdReceiver.getInstanceIdReciever().addonSuccessListener(new OnSuccessListener(){