以未知类型作为返回类型实现通用Java接口
我使用的Java接口定义如下:以未知类型作为返回类型实现通用Java接口,java,generics,Java,Generics,我使用的Java接口定义如下: interface Whatever<T> { T aMethod(); } 我想为编译时未知的类型实现它,例如,在运行时通过反射确定。这是可能的,因为泛型类型在编译时被丢弃,所以它们显然是不需要的。但是,语法要求为T指定要替换的内容,否则程序将无法编译 我应该替换什么类型的T?一种解决方案是替换对象: lambda会自动推断类型,在本例中,这是完全正确的,因为类型在内部并不重要,编译器可能会将T推断为对象或在lambda主体中返回的对象的类
interface Whatever<T> {
T aMethod();
}
我想为编译时未知的类型实现它,例如,在运行时通过反射确定。这是可能的,因为泛型类型在编译时被丢弃,所以它们显然是不需要的。但是,语法要求为T指定要替换的内容,否则程序将无法编译
我应该替换什么类型的T?一种解决方案是替换对象: lambda会自动推断类型,在本例中,这是完全正确的,因为类型在内部并不重要,编译器可能会将T推断为对象或在lambda主体中返回的对象的类型 我想为编译时未知的类型实现它,例如,在运行时通过反射决定 泛型纯粹是一个编译时概念。如果您不想或不需要在编译时知道类型,请不要使用泛型: 接口无论什么{ 物体法; } 这样更容易使用: Whatever=->{[statements]};
这不再是一个原始类型,因为它不是通用的当我写问题时,我想到了两个解决方案,我发布了这两个解决方案。欢迎使用任何其他解决方案或注意事项。不要在java中使用匈牙利符号。i、 e.不要从i开始你的接口。这是一种可怕的编码方法,大多数行业已经不再采用这种方法,java社区非常不喜欢这种方法。@SoftwareEngineer匈牙利符号是我正在从事的项目选择的惯例,这就引出了这个问题。我改变它是为了它,但是我不认为它与这个问题有多大关系。我从来都是一个原始类型。不要使用原始类型。使用IWhatever.@AndyTurner输入错误。更正。我不控制界面。我稍微改变了原始问题的措辞,使其更加明显。顺便说一句,界面减去更改后的名称,当然是一家大型科技公司的一个大型项目的一部分。
Whatever<?> whatever = new Whatever<Object>() {
public Object aMethod() { [statements] }
};
Whatever<?> whatever = () -> { [statements] };