具有不同参数的抽象函数
Abstract function with different parameters
我想用抽象函数 calc()
声明一个抽象 class 并将其与不同类型的参数一起使用。
public abstract class AbstractCalculation{
public abstract double calc();
...
}
public StringClass extends AbstractCalculation{
public double calc(String a, String b);
}
public DoubleClass extends AbstractCalculation{
public double calc(double a, double b);
}
我该如何解决这个问题?
也许您的意思是像这样使用泛型:
public abstract class AbstractCalculation<T> {
public abstract double calc(T...params);//Here you can pass N param with any type
}
要从这个摘要 class 扩展,您可以使用:
public class DoubleClass extends AbstractCalculation<Double> {
@Override
public double calc(Double... params) {
//Your action here
}
}
public class StringClass extends AbstractCalculation<String> {
@Override
public double calc(String... params) {
//Your action here
}
}
使用泛型 https://docs.oracle.com/javase/tutorial/java/generics/why.html
public abstract class Calculator<T, R>{
public abstract Double calc(T t, R r);
}
StringClass.java
public class StringClass extends Calculator<String, String>{
@Override
public Double calc(String t, String r) {
return null; //TODO your logic
}
}
DoubleClass.java
public class DoubleClass extends Calculator<Double, Double>{
@Override
public Double calc(Double t, Double r) {
return null; //TODO your logic
}
}
如果你想要灵活的 return 类型。
CalculatorV1.java
public abstract class CalculatorV1<T, R, V> {
public abstract V calc(T t, R r);
}
DoubleClassV1.java
public class DoubleClassV1 extends CalculatorV1<Double, Double, Integer>{
@Override
public Integer calc(Double t, Double r) {
return null; //TODO your logic
}
}
您可以使用 Generics 来做到这一点,但您不能对它们使用原始数据类型。
要了解有关泛型的更多信息,请参阅 。
public abstract class AbstractCalculation<T, V> {
public abstract T calc(T t, V v);
...
}
现在用类型扩展这个 class。
喜欢:
class IntegerAddImpl extends AbstractCalculation<Integer, Integer> {
@Override
public Integer calc(Integer t, Integer v) {
return t + v;
}
}
class StringAddImpl extends AbstractCalculation<String, String>{
@Override
public String calc(String t, String v) {
return t + v;
}
}
我想用抽象函数 calc()
声明一个抽象 class 并将其与不同类型的参数一起使用。
public abstract class AbstractCalculation{
public abstract double calc();
...
}
public StringClass extends AbstractCalculation{
public double calc(String a, String b);
}
public DoubleClass extends AbstractCalculation{
public double calc(double a, double b);
}
我该如何解决这个问题?
也许您的意思是像这样使用泛型:
public abstract class AbstractCalculation<T> {
public abstract double calc(T...params);//Here you can pass N param with any type
}
要从这个摘要 class 扩展,您可以使用:
public class DoubleClass extends AbstractCalculation<Double> {
@Override
public double calc(Double... params) {
//Your action here
}
}
public class StringClass extends AbstractCalculation<String> {
@Override
public double calc(String... params) {
//Your action here
}
}
使用泛型 https://docs.oracle.com/javase/tutorial/java/generics/why.html
public abstract class Calculator<T, R>{
public abstract Double calc(T t, R r);
}
StringClass.java
public class StringClass extends Calculator<String, String>{
@Override
public Double calc(String t, String r) {
return null; //TODO your logic
}
}
DoubleClass.java
public class DoubleClass extends Calculator<Double, Double>{
@Override
public Double calc(Double t, Double r) {
return null; //TODO your logic
}
}
如果你想要灵活的 return 类型。
CalculatorV1.java
public abstract class CalculatorV1<T, R, V> {
public abstract V calc(T t, R r);
}
DoubleClassV1.java
public class DoubleClassV1 extends CalculatorV1<Double, Double, Integer>{
@Override
public Integer calc(Double t, Double r) {
return null; //TODO your logic
}
}
您可以使用 Generics 来做到这一点,但您不能对它们使用原始数据类型。
要了解有关泛型的更多信息,请参阅
public abstract class AbstractCalculation<T, V> {
public abstract T calc(T t, V v);
...
}
现在用类型扩展这个 class。
喜欢:
class IntegerAddImpl extends AbstractCalculation<Integer, Integer> {
@Override
public Integer calc(Integer t, Integer v) {
return t + v;
}
}
class StringAddImpl extends AbstractCalculation<String, String>{
@Override
public String calc(String t, String v) {
return t + v;
}
}