Есть ли способ ссылаться на группу методов в Java 8, которая меняет свою подпись на перегрузку?Ссылки на методы в Java 8: поддерживается ли перегрузка?
Точнее, я хотел бы этот код для работы:
public class OverloadingMethodRef
{
public static void foo (int x) {
System.out.println ("An integer: " + x);
}
public static void foo (String x) {
System.out.println ("A String: " + x);
}
/**
* I want it to work without this
*/
// public static void foo (Object x) {
// if (x instanceof Integer) foo ((int) x); else foo ((String) x);
// }
public static void main (String[] args)
{
// Compile error, it wants a precise reference to one of them
Consumer<Object> c = PolymorphicMethodRef::foo;
foo ("bla"); // despite it could get it
foo (1); // and here too
}
}
Я не могу позволить, чтобы добавить public static void foo (Object x)
, потому что у меня есть много способов, чтобы перейти к другому методу, и я не хочу писать оберток. До сих пор я мог делать это только через отражение (которое может принимать param.getClass()
), но методы, которые я должен вызывать, имеют разные аргументы (> = 1) и каждый раз, когда мне нужно помещать их в массив, а также их типы в другом.
Поддерживается полиморфизм. А также нет - это не полиморфизм, это перегрузка **. И нет, нет - Java-метод вызывает вызовы для конкретных перегрузок метода во время компиляции. –
Whops! Да, я имею в виду перегрузку, я задал вопрос, спасибо. – zakmck
Это действительно невозможно получить ссылку на метод, которая будет действовать так, как если бы она указывала на перегруженный метод. Лучше всего вы можете добавить еще один метод, например 'void foo (Object x)', и вывести его из этого, но он все равно всегда будет называть этот точный метод (с параметром Object) и никогда не решится ни на что другое. –