繁体   English   中英

在Java中区分foo(int)和foo(Integer)

[英]Distinguish between foo(int) and foo(Integer) in java

我目前无法找到这个,尽管我目前有一个用例,其中有一个通用类型,该通用类型具有方法foo(int)和方法foo(T) 在我的用例中,该类型用T = Integer实例化,这意味着我有方法foo(int)foo(Integer) 每当我尝试调用foo(Integer)它都会调用foo(int) ,无论是否指定类型,是否强制转换。 解决它的唯一方法是使用Long,而我不想这样做。

有什么办法可以强制Java使用foo(Integer)方法?

编辑:

一次,要回答评论,我认为代码在这里不相关,因为我所描述的内容足以理解我的意思。 其次,对不起,我很抱歉。 我没有预期的行为,并认为这是因为这方面的问题,特别是因为我的IDE显示了foo(int)方法的用法。 我现在要关闭这个

MVCE:

Main.java

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(Main,args);
    }
}

Controller.java

package sample;

import javafx.collections.FXCollections;
import javafx.fxml.Initializable;
import javafx.scene.control.ListView;


public class Controller implements Initializable {

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        ListView<Integer> listView = new ListView<>();
        listView.setItems(FXCollections.observableArrayList(1, 5, 8, 13));
        Integer t = 5;
        listView.getSelectionModel().select(t);
        System.out.println(listView.getSelectionModel().getSelectedItems());
    }
}

sample.fxml

<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<GridPane fx:controller="sample.Controller"
          xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>

您会注意到此代码可以按预期工作,但是我现在发现的是,由于我不是使用Java而是使用groovy-将文件结尾更改为groovy并使用groovy编译器进行编译使该程序具有我描述的行为,表示该问题与groovy相关,与Java相关。

如上所述,您的问题有一个简单的答案:

class Foo<T> {
    void foo(int i) {
        System.out.println("foo(int)");
    }
    void foo(T t) {
        System.out.println("foo(T)");
    }
}

private void test() {
    Foo<Integer> foo = new Foo<>();
    foo.foo(1);
    foo.foo((Integer)1);
    foo.foo(Integer.valueOf("1"));
}

印刷品:

foo(int)

脚丫子)

脚丫子)

但是,我怀疑您已经尝试过此操作,因此请发布一些示例代码。

如果愿意,请在此处查看方法选择规则: https : //docs.oracle.com/javase/specs/jls/se11/html/jls-5.html#jls-5.3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM