JAVA继承问题,实际参数列表与形式参数列表长度不同怎么解决
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA继承问题,实际参数列表与形式参数列表长度不同怎么解决相关的知识,希望对你有一定的参考价值。
import java.lang.Math;
class Cylinder
public double radius,height;
public Cylinder(double radius,double height)
this.radius=radius;
this.height=height;
double superficialarea()
return 2*Math.PI*radius*radius+2*Math.PI*radius*height;
double volume()
return Math.PI*radius*radius*height;
void show()
System.out.println("圆柱体的表面积:"+superficialarea()+"圆柱体的体积:"+volume());
class Ringcylinder extends Cylinder
double innerradius;
public Ringcylinder(double radius,double height,double innerradius)
this.radius=radius;
this.height=height;
this.innerradius=innerradius;
void setinnerradius(double innerradius)
this.innerradius=innerradius;
double superficialarea()
return 2*(Math.PI*radius*radius-Math.PI*innerradius*innerradius)+2*Math.PI*(radius+innerradius)*height;
double volume()
return Math.PI*(radius*radius-innerradius*innerradius)*height;
void show()
System.out.println("环柱体的表面积:"+superficialarea()+"环柱体的体积:"+volume());
public class Test
public static void main(String[] args)
Cylinder a=new Cylinder(5,10);
a.show();
Ringcylinder b=new Ringcylinder(5,10,1);
b.show();
this.radius=radius;
this.height=height;
this.innerradius=innerradius;
这个构造函数虽然定义了radius, height, innerradius,但在print之前没有给构造函数传入这个几个参数,所以导致出现此问题,再调用print之前,可以设置Ringcylinder(0.5,3,1),这样构造函数才能进行初始化全局变量,全局变量才能计算。不然首先没有参数为空的构造函数,有没有将参数传入,必然会报错。 参考技术A Cylinder缺少一个空参构造函数
public Cylinder()
super();
因为在Ringcylinder的构造函数中会默认调用
super();
而Cylinder不存在该构造函数所以报错。本回答被提问者和网友采纳 参考技术B 首先,构造函数时可以重载的,可以解决你的标题中的问题
而,你的代码中的问题并不像你的标题那样,这是因为继承中,基类没有办法构造造成的(基类没有默认构造函数,或者没有给基类提供参数)。 参考技术C 在Cylinder类中写个什么参数都不带的构造方法就完美了
没有适合 Stripe 的构造函数
【中文标题】没有适合 Stripe 的构造函数【英文标题】:No suitable constructor for Stripe 【发布时间】:2020-01-06 12:57:44 【问题描述】:我得到的错误是 错误:没有找到适合 Stripe(StripeFormActivity,String) 的构造函数 构造函数 Stripe.Stripe() 不适用 (实际参数列表和形式参数列表的长度不同) 构造函数 Stripe.Stripe(String) 不适用 (实际参数列表和形式参数列表的长度不同)
Stripe stripe=new Stripe(StripeFormActivity.this,PUBLISHABLE_KEY);
stripe.createToken(
card,
new TokenCallback()
public void onSuccess(Token token)
//getTokenList().addToList(token);
ProgressDialog.cancel();
cusRotateLoading.stop();
Log.d("token", "token = " + token.getId());
Intent ri = new Intent();
ri.putExtra("stripe_id", token.getId());
setResult(2, ri);
finish();
public void onError(Exception error)
ProgressDialog.cancel();
cusRotateLoading.stop();
Common.showMkError(StripeFormActivity.this, error.getLocalizedMessage());
);
【问题讨论】:
嗯,你为什么要通过StripeFormActivity.this
?据我所知,这个论点应该是Context。例如,尝试传递new Stripe(getApplicationContext(),PUBLISHABLE_KEY);
,但基本上你应该传递一个上下文。
【参考方案1】:
这里是 kotlin 版本
Stripe(this, stripePublicKey).createToken(card, object : ApiResultCallback<Token>
override fun onSuccess(token: Token)
if (token.card != null)
else
Utils.showToast(getString(R.string.something_went_wrong), this)
override fun onError(error: Exception)
Utils.showToast(error.localizedMessage, this)
)
这里是java版本
new Stripe(this, stripePublicKey).createToken(card, new ApiResultCallback<Token>
override onSuccess(Token:token)
if (token.card != null)
else
Utils.showToast(getString(R.string.something_went_wrong), this)
override onError(Exception:error)
Utils.showToast(error.localizedMessage, this)
)
【讨论】:
【参考方案2】:从TokenCallback()
更改为新的ApiResultCallback<Token>()
。导入com.stripe.android.ApiResultCallback
并获取当前最新版本的11.1.3
所以修改后会是这样的
Stripe stripe=new Stripe(StripeFormActivity.this,PUBLISHABLE_KEY);
stripe.createToken(
cardToSave,
new ApiResultCallback<Token>()
public void onSuccess(@NonNull Token token)
//getTokenList().addToList(token);
ProgressDialog.cancel();
cusRotateLoading.stop();
Log.d("token", "token = " + token.getId());
Intent ri = new Intent();
ri.putExtra("stripe_id", token.getId());
setResult(2, ri);
finish();
public void onError(@NonNull Exception error)
ProgressDialog.cancel();
cusRotateLoading.stop();
Common.showMkError(StripeFormActivity.this, error.getLocalizedMessage());
);
【讨论】:
错误:不兼容的类型:> 无法转换为 TokenCallbac 在你的 app.gradle 中添加这个 (implementation 'com.stripe:stripe-android:11.1.3'
) 依赖并同步你的项目。
与第一个错误相同【参考方案3】:
在最新版本12.8.2
中,有几个API已经被弃用,请看下面我的解决方案。
第 1 步:在 gradle 文件中使用最新的依赖项
def stripe_version = "12.8.2"
implementation "com.stripe:stripe-android:$stripe_version"
第 2 步:将StripeFormActivity
中的代码更改为
Stripe stripe = new Stripe(StripeFormActivity.this, PUBLISHABLE_KEY);
stripe.createCardToken(card, new ApiResultCallback<Token>()
@Override
public void onSuccess(Token token)
//getTokenList().addToList(token);
ProgressDialog.cancel();
cusRotateLoading.stop();
Log.d("token", "token = " + token.getId());
Intent ri = new Intent();
ri.putExtra("stripe_id", token.getId());
setResult(2, ri);
finish();
@Override
public void onError(@NotNull Exception e)
ProgressDialog.cancel();
cusRotateLoading.stop();
Common.showMkError(StripeFormActivity.this, error.getLocalizedMessage());
);
【讨论】:
以上是关于JAVA继承问题,实际参数列表与形式参数列表长度不同怎么解决的主要内容,如果未能解决你的问题,请参考以下文章