Причина в том, что сдерживание определяется equals
и hashCode
, которые являются методами на Object
, и оба принимают параметр Object
. Это был ранний недостаток дизайна в стандартных библиотеках Java.
Единственный способ иметь безопасные хеш-таблицы и равенство в Java - это избегать Object.equals
и Object.hashCode
и использовать общий заменитель. Функциональная Java поставляется с типами классов только для этой цели: Hash
и Equal
. Предоставляется оболочка для HashMap
, которая принимает Hash
и Equal
в своем конструкторе. Таким образом, методы get
и contains
этого класса принимают общий аргумент типа K
.
Пример:
HashMap h =
new HashMap(Equal.stringEqual, Hash.stringHash);
h.add("one", 1);
h.get("one"); // All good
h.get(Integer.valueOf(1)); // Compiler error
Компонент MathJax React - это то, что вы искали.
Импортируйте пакет и заполните свойство math некоторым текстом, содержащим ваши форматы. Wrap TeX в $ или $$ и ASCIImath в `. Paste MathML as is.
Вот пример:
import React, {Component} from 'react'
import {render} from 'react-dom'
import MathJax from 'react-mathjax-preview'
const asciimath = '`sum_(i=1)^n i^3=((n(n+1))/2)^2`' # Because of the backtick
const math = String.raw`
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<menclose notation="circle box">
<mi> x </mi><mo> + </mo><mi> y </mi>
</menclose>
</math>
$$\lim_{x \to \infty} \exp(-x) = 0$$
${asciimath}`
class Demo extends Component {
constructor(props) {
super(props);
this.state = {
math: tex
}
render() {
return <MathJax math={this.state.math} />
}
}
У них также есть более продвинутое демо внутри репозитория.
PS: Я видел одну проблему , связанную с MathML в своем репо. Обходной путь описан там.