Используется для ссылочного типа Java Void?

Вы можете переместить выборку в отдельный метод, который вы вызываете как в componentDidMount, так и в nextPic.

Пример

class App extends React.Component {
  state = {
    meme: {},
    num: 6
  };

  componentDidMount() {
    this.fetchMeme();
  }

  fetchMeme = () => {
    const url = `http://meme.com/${this.state.num}`;

    fetch(url)
      .then(resp => resp.json())
      .then(data => {
        this.setState({
          meme: data
        });
      });
  };

  nextPic = () => {
    this.setState({
      num: this.state.num >= this.state.meme.totalMemes ? 1 : this.state.num + 1
    }, this.fetchMeme);
  };

  render() {
    return (
      <div>
        <h1>{this.state.meme.title}</h1>
        <img key={this.state.num} src={this.state.meme.encodedurl} />
        <button onClick={this.nextPic}>Next</button>
      </div>
    );
  }
}
158
задан diralik 22 November 2017 в 19:54
поделиться

6 ответов

Void стал конвенцией для универсального аргумента, что Вы не интересуетесь. Нет никакой причины, почему необходимо использовать любой другой тип non-instantiable, такой как System.

Это также часто используется в, например Map значения (хотя Collections.newSetFromMap использование Boolean как карты не должно принимать null значения), и java.security.PrivilegedAction.

я записал запись блога на Void несколько лет назад.

114
ответ дан Michael Myers 23 November 2019 в 21:41
поделиться

Можно создать экземпляр Пустых отражений использования, но они ни для чего не полезны. Пусто способ указать, что общий метод ничего не возвращает.

Constructor<Void> constructor = Void.class.getDeclaredConstructor();
constructor.setAccessible(true);
Void v = constructor.newInstance();
System.out.println("I have a " + v);

печать что-то как

I have a java.lang.Void@75636731
48
ответ дан Peter Lawrey 23 November 2019 в 21:41
поделиться

Future<Void> работы как очарование.:)

27
ответ дан Pablo 23 November 2019 в 21:41
поделиться

Учитывая, что существует никакие общедоступные конструкторы , я сказал бы, что этому нельзя присвоить ничто кроме null. Я только использовал его в качестве заполнителя для, "Я не должен использовать этот универсальный параметр" как Ваши шоу в качестве примера.

Это могло также использоваться в отражении, от того, что говорит Javadoc:

Пустой класс является uninstantiable классом заполнителя для содержания ссылки на Объект класса, представляющий ключевое слово Java пусто.

19
ответ дан Michael Myers 23 November 2019 в 21:41
поделиться

Все примитивные классы обертки (Integer, Byte, Boolean, Double, и т.д.) содержат ссылку на соответствующий примитивный класс в помехах TYPE поле, например:

Integer.TYPE == int.class
Byte.TYPE == byte.class
Boolean.TYPE == boolean.class
Double.TYPE == double.class

Void был первоначально создан как где-нибудь для помещения ссылки на эти void тип:

Void.TYPE == void.class

Однако Вы ничего действительно не получаете при помощи Void.TYPE. Когда Вы используете void.class, намного более ясно, что Вы делаете что-то с эти void тип.

Как в стороне, в прошлый раз, когда я попробовал его, , BeanShell не распознал void.class, таким образом, необходимо использовать Void.TYPE там.

17
ответ дан Luke Woodward 23 November 2019 в 21:41
поделиться

Перед дженериками это было создано для API Reflection, для содержания TYPE, возвращенной Method.getReturnType () для пустого метода, соответствуя другим классам типа примитива.

РЕДАКТИРОВАНИЕ: От JavaDoc Пустоты: "Пустой класс является uninstantiable классом заполнителя для содержания ссылки на Объект класса, представляющий ключевое слово Java пусто". До Дженериков я знаю о том, чтобы быть бесполезном кроме отражения.

5
ответ дан Lawrence Dol 23 November 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: