Java Tuple без создания параметров нескольких типов
Есть ли способ создать Tuple
в Java, без необходимости создавать несколько классов?
Например, можно создать разные классы для каждого типа кортежей, каждый с разным числом Type Parameters
:
public class SingleTuple<T>{}
public class DoubleTuple<T1, T2>{}
public class TripleTuple<T1, T2, T3>{}
public class QuadraTuple<T1, T2, T3, T4>{}
public class PentaTuple<T1, T2, T3, T4, T5>{}
И также возможно создать объект Tuple без каких-либо Type Parameters
просто сделав это:
public class Tuple{
private Object[] objects;
public Tuple(Object... objects){
this.objects = objects;
}
public Object get(int index){
return this.objects[index];
}
}
За исключением случаев, когда это используется, все объекты должны быть приведены к своему правильному подклассу, как только они будут извлечены из кортежа, делая его похожим на ArrayList<Object>
, но с меньшими возможностями.
Есть ли способ просто создать один единственный класс, и иметь несколько Type Parameters
без определения их всех (как в первом примере), используя что-то вроде этого?
public class Tuple<T...>{
}
3 ответа
Нету. Если вы хотите обеспечить безопасность типов, вам придется создавать их так, как вы представили в своем первом фрагменте кода. Есть библиотеки, которые делают это для вас, например, jOOL.
Есть отвратительный обходной путь.
Все, что вам нужно, это класс Pair<A, B>
, Тогда вместо QuadraTuple<T1, T2, T3, T4>
Вы могли бы иметь Pair<T1, Pair<T2, Pair<T3, T4>>>
,
Чтобы получить T3
из этого вам придется написать T3 t3 = quadraTuple.second().second().first();
, Это типобезопасно и распространяется на любое количество параметров.
Никогда не делай этого.
Я разработал библиотеку на Java, которая реализует небезопасный по типу кортеж (
Приглашаю вас посмотреть мой репозиторий на GitHub: JTuple
Эта реализация кортежа очень полезна для меня, и я постоянно применяю ее во многих других проектах.