Java 如何为该类的对象提供对象和方法引用?

Java 如何为该类的对象提供对象和方法引用?,java,method-reference,Java,Method Reference,我已经编写了一个方法,为控制台创建一个输入菜单,它显示多个选项供用户选择,并返回用户选择的选项。该方法接受一个对象数组,并通过调用对象上的toString()方法来显示它们。问题是,在某些情况下,我不想对这些对象调用toString()方法,但可能是getName()方法。因此,我希望能够传递一个方法引用,该方法引用可以在对象上调用,并将返回一个字符串。 然后我可以传递一个persons数组和getFullName()方法。persons将在控制台上显示其全名,但我仍然会返回person对象,我

我已经编写了一个方法,为控制台创建一个输入菜单,它显示多个选项供用户选择,并返回用户选择的选项。该方法接受一个对象数组,并通过调用对象上的
toString()
方法来显示它们。问题是,在某些情况下,我不想对这些对象调用
toString()
方法,但可能是
getName()
方法。因此,我希望能够传递一个方法引用,该方法引用可以在对象上调用,并将返回一个
字符串
。 然后我可以传递一个persons数组和
getFullName()
方法。persons将在控制台上显示其全名,但我仍然会返回person对象,我不必按其全名查找person对象。 以下是我当前的方法代码:

    /**
 * Prints the provided question and the options to choose from
 * 
 * @param question
 *            the question to ask the user
 * @param options
 *            list of objects the user can choose from
 * @return chosen object
 */
public Object getMultipleChoiceResult(String question, List<?> options) {
    int result = 0;

    while (result > options.size() | result < 1) {
        System.out.println(question);
        for (int i = 1; i <= options.size(); i++) {
            System.out.println("(" + i + ") " + options.get(i - 1).toString());
        }

        try{
            result = scanner.nextInt();
            } catch (InputMismatchException e) {
                System.err.println("wrong input");
                scanner.next();
            }

    }

    return options.get(result - 1);
}
/**
*打印提供的问题和可供选择的选项
* 
*@param问题
*询问用户的问题
*@param选项
*用户可以从中选择的对象列表
*@返回所选对象
*/
公共对象GetMultipleChiiceResult(字符串问题,列表选项){
int结果=0;
而(结果>选项.size()|结果<1){
System.out.println(问题);

对于(int i=1;i有很多方法可以实现这一点。相对现代的方法是通过:

上面假设
myList
是一个
List
,并且
MyType
有一个非静态方法
getFullName()
返回一个
字符串


我想你在找这个:

public <T> T getMultipleChoiceResult(String question, List<T> options, Function<T, String> toString) {
    // ...
    System.out.println("(" + i + ") " + toString.apply(options.get(i - 1)));
    // ...
}
或者,您可以传递
人员的列表
并打印
人员.getFullName()


听起来你想使用接口。是的,但是我只能将对象作为实现此接口的选项传递。我有一些对象希望作为选项传递,这些对象在依赖项中定义了哪些类,因此我无法编辑它们。谢谢,这正是我要找的!我有一个问题:我必须强制转换返回到特定类型?在您的示例中:Person result=(Person)getMultipleCh…否,如果您传递一个
列表,则泛型类型应自动执行此操作。是的,是您的权利,我的错误。我忘了将返回类型更改为“T”:/
showList(myList, MyType::getFullName);
public <T> T getMultipleChoiceResult(String question, List<T> options, Function<T, String> toString) {
    // ...
    System.out.println("(" + i + ") " + toString.apply(options.get(i - 1)));
    // ...
}
Object result = getMultipleChoiceResult(question, options, Object::toString);
Person result = getMultipleChoiceResult(question, persons, Person::getFullName);