powiedzmy mam metody takie jak to:Metoda rodzajowych bez argumentów
static class Example
{
public static <N extends Number> Number getOddBits(N type)
{
if (type instanceof Byte) return (byte)0xAA;
else if (type instanceof Short) return (short)0xAAAA;
else if (type instanceof Integer) return 0xAAAAAAAA;
else if (type instanceof Float) return Float.intBitsToFloat(0xAAAAAAAA);
else if (type instanceof Long) return 0xAAAAAAAAAAAAAAAAL;
else if (type instanceof Double) return Double.longBitsToDouble(0xAAAAAAAAAAAAAAAAL);
throw new IllegalArgumentException();
}
}
Rzeczywiste specyfika metoda ta jest bardzo ważna. Jednakże, aby wywołać tę metodę używamy:
Example.<Float>getOddBits(0f);
Moje pytanie brzmi, czy jest możliwe, aby napisać taki sposób bez konwencjonalnych parametrów. Bez przeciążania, a ostatecznie bez Boxing.
Idealnie wywołany przez:
Example.<Byte>getOddBits();
przypuszczam nie z powodu usunięcia, ale można pozbyć się superflous parametru instancji i użyć obiektu klasy jako parametr: 'getOddBits (klasa clazz)'. Nie sądzę, żebyś mógł obejść boks, ponieważ typ zwrotu nie wystarcza do stworzenia odrębnych sygnatur, tzn. 'Byte getOddBits()' i 'int getOddBits()' mogą być niejednoznaczne. –
Pyranja
Mogą być również inne opcje. Dlaczego musisz to zrobić? dla przykładu, przy zwracaniu zasadniczo wartości statycznych można użyć wyliczenia. Jeśli jest coś bardziej konkretnego, mogą być również inne opcje. Na przykład, jeśli konwertujesz numer do innego formularza, możesz utworzyć interfejs konwersji, np. Za pomocą metody toBytes i fromBytes. następnie musisz mieć wszystkie klasy, których potrzebujesz, aby to zaimplementować. Nie jestem pewien, czy to pomaga, czy nie mógłbyś podać bardziej konkretnego przykładu bliżej tego, co potrzebujesz? –
@JohnKane Przykład był arbitralny, tylko po to, aby zademonstrować użycie typu zwrotnego podklasy, jak określono za pomocą argumentu w najczystszy możliwy sposób. Prawdopodobnie mogłem pojechać ze starym 'foo-bar-baz', ale pomyślałem, że praktyczny przykład będzie lepiej pasował. – azz