gpt4 book ai didi

java - 模板和泛型。为什么我可以在 C++ 中执行以下操作,但不能在 Java 中执行?我该如何克服这个问题?

转载 作者:行者123 更新时间:2023-11-28 00:13:59 25 4
gpt4 key购买 nike

<分区>

考虑以下 C++ 程序:

#include <iostream>
using namespace std;

template<typename T>
class example
{
public:
void function (T a)
{
std::cout<<a.size ();
}
};

int main() {
example<string> a; // this doesn't
string b = "a";
//example<int> a; This gives an error
a.function (b);
// your code goes here
return 0;
}

现在考虑以下 Java 程序:

import java.util.ArrayList;

class example<T> {

public void function (T a)
{
System.out.println (a.toHexString(5)); /* this does not compile even when T is Integer */
}


}

public class Main
{
public static void main (String[] args)
{
example<Integer> a = new example<Integer> ();
Integer b = 2;
a.function(b);

return;
}
}

到目前为止,我主要是一名 C++ 开发人员,并且出于工作目的正在学习 Java。因此,从使用模板的背景来看,泛型让我感到困惑。

回到我的问题:

在上面的 C++ 代码中,如果我将字符串作为模板参数传递,代码可以正常编译和运行,因为字符串确实有一个 size () 方法。如果我使用 int 作为模板参数,我会得到一个错误,这是可以理解的。这里要注意的一点是,如果我传递一个具有名为 size() 的方法的模板参数,C++ 允许我编译和运行代码。

但是,在 Java 代码中,即使我将 Integer 作为通用参数传递(?这是一个术语吗?),它确实具有 toHexString(int) 方法,程序仍然无法编译。它返回一个错误:

cannot find symbol

这里有什么问题?是什么阻止我在 Java 中实现这种行为?

编辑:该问题被标记为可能与另一个问题重复: How do I call a method of a generic type object?我将复制粘贴我对为什么我认为这个问题不同的回答。上面的问题“可能”告诉我如何摆脱错误。我想问的是,是什么阻止了我在 Java 中实现上述效果?上述问题给了我疾病的药物,而不是原因。

我在##java 上提过类似的问题,听说了一个新名词——物化。我想知道这是否与此有关?

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