虽然我目前有一个用例,其中有一个通用类型,该通用类型具有方法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相关。
答案 0 :(得分:2)
您所说的问题有一个简单的答案:
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)
foo(T)
foo(T)
但是,我怀疑您已经尝试过此操作,因此请发布一些示例代码。
如果愿意,请在这里查看方法选择的规则:https://docs.oracle.com/javase/specs/jls/se11/html/jls-5.html#jls-5.3。