Java将类型作为函数参数传入
我来自Python背景,在Python中,您可以将对象的类型作为参数传入。但在Java中,您无法做到这一点,有没有关于如何让类似的东西工作的提示Java将类型作为函数参数传入,java,Java,我来自Python背景,在Python中,您可以将对象的类型作为参数传入。但在Java中,您无法做到这一点,有没有关于如何让类似的东西工作的提示 private void function(Type TypeGoesHere) Stock s = new TypeGoesHere(); s.analyze(); } 在Java中,您可以传递一个类。您可以这样做: private void function(Class c) 但这并不是很常见的直肠疾病。通过研究策略模式或正确使
private void function(Type TypeGoesHere)
Stock s = new TypeGoesHere();
s.analyze();
}
在Java中,您可以传递一个类。您可以这样做:
private void function(Class c)
但这并不是很常见的直肠疾病。通过研究策略模式或正确使用面向对象编程(多态性),您可能会得到您需要的东西
如果您正在寻找构建某些对象的方法,请查看Factory模式
如果您想创建一个泛型类,请查看以下详细答案:Java不支持Python引用函数和类的方式。要实现这种行为,必须使用两种高级技术:泛型和反射。解释这些概念超出了SO回答的范围。您应该阅读Java指南来了解它们 然而,下面是一个示例,假设给定的类有一个无参数构造函数,它是什么样子的:
public <T extends Stock> void analyzeNewStock(Class<T> clazz) throws Exception {
Stock s = clazz.newInstance();
s.analyze();
}
你可以用。例如:
private <T> void function(Class<T> clazz) {
try{
T t = clazz.newInstance();
//more code here
}catch(InstantiationException | IllegalAccessException ex){
ex.printStackTrace();
}
}
//interface to implement
public interface Stock {
public void analyze();
}
//rewrite of function
private void function(Stock s){
s.analyze();
}
并使用两种方法调用函数
:
//first way
public class XYZ implements Stock{
public void analyze(){
//some code here
}
}
//calling the function
function(new XYZ());
//second way
function(new Stock(){
public void analyze(){
//your code here
}
});
搜索“Java反射”(如中所示)可能会与更一般的搜索“Java反射”(如中所示)重复,这将为您提供一些相关信息。如果有参数被传递到Stock类中,代码会是什么样子?@budi I更新了第二个示例。实现取决于参数是否始终具有相同的值(
valueTwo
)或可以不同(valueOne
)。@budi如果要使用第一个示例(我不建议这样做),您可以编写e。g<代码>clazz.getConstructor(String.class,String.class).newInstance(“嘿”,“ho”)代码>。我成功了,你的代码很好用,谢谢!令人失望的是,在Java中没有更简单的方法来实现这一点(我非常想念Python),在这个答案中不需要泛型。如果您遵循擦除对代码所做的操作,只需传入一个基类型参数“Stock”将与泛型版本具有相同的效果。泛型是编译时的,他想要的是比泛型更多的反射。这很公平,但无论如何,接口可能更好。
//first way
public class XYZ implements Stock{
public void analyze(){
//some code here
}
}
//calling the function
function(new XYZ());
//second way
function(new Stock(){
public void analyze(){
//your code here
}
});