gpt4 book ai didi

Java 通用拼图

转载 作者:搜寻专家 更新时间:2023-11-01 01:25:39 25 4
gpt4 key购买 nike

我有 Java 类:

abstract class Parent {
abstract void test(Object pObject, Map<String, Object> pData);
}

public class Test extends Parent {
@Override
void test(Object pObject, Map<String, Object> pData) {
}
}

并想将代码重构为:

abstract class Parent<T> {
abstract void test(T pObject, Map<String, Object> pData);
}

public class Test extends Parent {
@Override
void test(Object pObject, Map<String, Object> pData) {
}
}

Eclipse(4.4.2 如果重要的话)告诉我测试类中的代码无效(编译时错误)并更正 test()方法签名必须是:

@Override
void test(Object pObject, Map pData) {
}

我的问题是为什么!?

实际上,真实的故事要长一些。我有很多子类(如测试),不想更改它们,更喜欢对父类的新子类使用通用类(即 <T> 类)。在这两种情况下, test() 的第二个参数方法必须是 Map<String, Object> .

有什么想法吗?

最佳答案

My question is WHY!?

当您扩展 Parent原始 版本时,那么类中的所有通用信息都将被忽略。因此,您正在扩展 Parent ,看起来像:

abstract class Parent {
abstract void test(Object pObject, Map pData);
}

为了保留 Map 的类型参数参数,你可以指定你正在扩展 Parent<Object> .现在这段代码应该可以正常编译了:

public class Test extends Parent<Object> {
@Override
void test(Object pObject, Map<String, Object> pData) {
}
}

关于Java 通用拼图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com