Как я могу определить, является ли javax.measure.Quantity скоростью?
У меня есть код, который использует API javax.measure для вычисления скорости отслеживаемого актива. Я передаю объект Quantity в качестве значения в средство визуализации JTable, а общий параметр (Скорость) был удален. Даже если бы был параметр "Скорость", я бы не смог об этом подумать, чтобы определить тип количества. Как определить, что количество - это скорость? Я хочу отображать значение по-другому, когда это скорость. В настоящее время у меня есть код, который злоупотребляет методом asType(), но это не похоже на то, как следует использовать API.
// FIXME: This seems hokey. There should be a better way.
public static <C extends Quantity<C>> boolean isOfType(final Quantity<?> q, final Class<C> c) {
try {
q.asType(c);
return true;
} catch (final ClassCastException e) {
return false;
}
}
public static boolean isSpeed(final Quantity<?> q) {
return isOfType(q, Speed.class);
}
1 ответ
Я бы сказал, что это, вероятно, лучшее, что вы можете сделать в Java на данный момент, потому что общие типы чрезвычайно ограничены по сравнению с C # или даже такими языками, как Kotlin, на JVM.
Хотя это звучало многообещающе в этом направлении, Project Valhalla до сих пор сильно разочаровывал как в отношении того, что он предлагал в первых превью, так и в целом. Только время покажет, приведет ли это когда-нибудь к чему-то полезному, особенно сейчас, когда Google только сегодня выиграл судебный процесс по Java над Oracle на SCOTUS. И хотя это очень хороший знак для сообщества Open Source в целом, он может еще больше уменьшить вклад Oracle, если он не сможет монетизировать его так, как он мог надеяться, взимая лицензионные сборы даже для Android.
Так что, хотя этот подход может показаться немного странным и непонятным, я боюсь, что это все, что вы можете сделать на данный момент. Мы экспериментировали с подобными вещами уже долгое время (в некоторых случаях более 10 лет), и до сих пор то, что позволяет язык Java, не намного больше, чем это.