LinkedHashSet:hashCode()和equals()匹配,但contains()不匹配(LinkedHashSet: hashCode() and equals() match, but contains() doesn't)
以下是如何可能的:
void contains(LinkedHashSet data, Object arg) { System.out.println(data.getClass()); // java.util.LinkedHashSet System.out.println(arg.hashCode() == data.iterator().next().hashCode()); // true System.out.println(arg.equals(data.iterator().next())); // true System.out.println(new ArrayList(data).contains(arg)); // true System.out.println(new HashSet(data).contains(arg)); // true System.out.println(new LinkedHashSet(data).contains(arg)); // true (!) System.out.println(data.contains(arg)); // false }
难道我做错了什么?
显然,它并不总是发生(如果你创建一组琐碎的对象,你将无法重现它)。 但它总是发生在我的情况下更复杂的arg类。
编辑 :我没有在这里定义
arg
主要原因是它是相当大的类,Eclipse生成的hashCode
跨越20行并且equals
两倍。 而且我不认为它是相关的 - 只要它们对于这两个对象是相同的。How is the following possible:
void contains(LinkedHashSet data, Object arg) { System.out.println(data.getClass()); // java.util.LinkedHashSet System.out.println(arg.hashCode() == data.iterator().next().hashCode()); // true System.out.println(arg.equals(data.iterator().next())); // true System.out.println(new ArrayList(data).contains(arg)); // true System.out.println(new HashSet(data).contains(arg)); // true System.out.println(new LinkedHashSet(data).contains(arg)); // true (!) System.out.println(data.contains(arg)); // false }
Am I doing something wrong?
Obviously, it doesn't always happen (if you create a trivial set of Objects, you won't reproduce it). But it does always happen in my case with more complicated class of arg.
EDIT: The main reason why I don't define
arg
here is that's it's fairly big class, with Eclipse-generatedhashCode
that spans 20 lines andequals
twice as long. And I don't think it's relevant - as long as they're equal for the two objects.
原文:https://stackoverflow.com/questions/8007723
最满意答案
React只会呈现JSX或字符串。 除非
this.state.data
是一个字符串,否则你需要将它转换为React渲染的东西。您可以通过对数据进行字符串化来测试:
<p className="App-intro"> Este es el resultado de la consulta = <b>{JSON.stringify(this.state.data)}</b> </p>
如果
this.state.data
是一个数组,则需要将其映射到JSX元素。React will only render JSX or strings. Unless
this.state.data
is a string, you will need to transform it into something React render.You can test this by stringifying your data:
<p className="App-intro"> Este es el resultado de la consulta = <b>{JSON.stringify(this.state.data)}</b> </p>
If
this.state.data
is a array, you will need to map it to JSX elements.
相关问答
更多-
你大多是正确的,但使用服务器端渲染并不意味着你也不会发出api请求。 服务器端呈现是一种用于改善初始加载时间的技术。 而不是拉下你的javascript包,然后进行一些api调用来加载它需要渲染的一堆数据,而不是在服务器上进行应用程序的初始渲染和引导。 然后将生成的html和应用程序的初始状态返回给客户端,以便可以立即向用户显示应用程序。 因此,当谈论具有反应的服务器端渲染时,它实际上是关于初始负载。 在初始加载之后,您仍然有一个动态前端应用程序。 当用户与应用程序进行交互时,您仍然最终会发出api请求。 ...
-
我无法使用reactjs和express从我的服务器获取数据(I can't get the data from my server using reactjs and express)[2022-02-04]
React只会呈现JSX或字符串。 除非this.state.data是一个字符串,否则你需要将它转换为React渲染的东西。 您可以通过对数据进行字符串化来测试:Este es el resultado de la consulta = {JSON.stringify(this.state.data)}
如果this.state.data是一个数组,则需要将其映射到JSX元素。 React will ... -
这个... app.use('/', function (req, res) { res.sendFile(path.resolve('client/index.html')); }); 来之前: app.post('/api/users/', function(req, res) { //... }); 由于它是app.use , POST /api/users仍将app.use该中间件, res.sendFile结束请求/响应。 您可能会看到您的帖子正在返回客户端HTML。 尝试将客户端HT ...
-
您正在以JSON格式发送数据。 尝试使用下面的代码片段来使用正文解析器中间件并访问所需的值 var bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); app.post('/get_cache_transactions', function (req, res) { var a = req.body.a; var b ...
-
这里有几件事需要纠正。 A)不需要创建这个 const formData = new FormData(); formData.append("file", fileName); B)在你的imgSrc状态下,你已经有了数据url.Just把它作为post参数发送给你的express服务器。 像这样的东西: - uploadPicture = () => { const { fileName, imgSrc } = this.state; const url = ...
-
定期从服务器获取数据并在reactjs中重新渲染视图(Fetch data periodically from server and re-render view in reactjs)[2023-05-30]
您的表组件在构造后永远不会更改其状态。 您可以通过从新道具更新状态来轻松修复它: export class Table extends Component { constructor(props) { super(props); this.state = { rows: props.rows } } componentWillReceiveProps(newProps) { this.setState({ rows: newProps ... -
您似乎在混合服务器端和客户端代码。 您的app.get函数是您对/main请求的服务器端处理程序。 你需要通过res对象发回一些东西。 由于您已映射ejs,我假设您的服务器端视图是EJS文件。 您可以使用以下简单的方式渲染它们: app.get('/main', function(req, res) { res.render('main'); // this requires a file named main.ejs } You appear to be mixing server side and ...
-
根据我的经验,最好使用来自UI应用程序的直接调用并避免中间服务器。 直接这样做的原因是我们的服务器最终有很多基于IP地址的限制,并且所有请求都来自中间服务器(nodeJS服务器),因此终端服务器的DDOS保护必须有一些例外(我们的节点服务器)可能在具有动态IP地址的ACS上,因此可能很难管理)。 此外,如果要传递和跟踪最终用户的IP地址,则需要在节点服务器上管理标头(以确保您按原始请求传递它)。 如果调用来自React应用程序并且只是在java服务器上设置CORS,那么管理这种情况会更简单。 此外,它更容易 ...
-
Ajax与ReactJS到NodeJS(Ajax With ReactJS to NodeJS)[2021-12-10]
应用程序的port不同于您的服务器的port 。 如果你想保存保存端口,你可以尝试使用webpack代理 module.exports = { // the other config of your webpack devServer: { hot: true, historyApiFallBack: true, proxy: { '/message': { target: 'http:/ ... -
我应该在哪里从Redux + ReactJS中的服务器加载数据?(Where should I load data from server in Redux + ReactJS?)[2022-06-15]
一种方法是使用redux-thunk检查redux存储中是否存在数据,如果不存在,则发送服务器请求以加载缺少的信息。 您的GroupPage组件看起来像 class GroupPage extends Component { componentWillMount() { const groupId = this.props.params.groupId this.props.loadGroupPage(groupId); } ... } 在你的行动...... const lo ...