构造函数不能应用于 Java 中的给定类型



这个类负责接收一个EditText作为输入参数,该将通过父类的方法转换为Double(此方法convertToDouble在另一个类中实现(。在此之后,Double中的这个新值应传递给addToListCelsius父类方法。

public class TemperatureInCelsius extends TemperatureMain {
public Double auxDouble;
public EditText tempCel;
public TemperatureInCelsius(Double _auxDouble, EditText _tempCel){
auxDouble = _auxDouble;
tempCel = _tempCel;
}
public void setTemperature (EditText tempCel) {
super.convertToDouble(tempCel);
auxDouble = super.getDoubleVal();
super.addToListCelsius(auxDouble);
}
}

类温度主要

public class TemperatureMain {
public String valString = "";
public double val;
public Map<String, List<Double>> temperatureDic = new Hashtable<>();
public int i=0;
public List<Object> listCelsius = new ArrayList<>();
public List<Object> listFahreneit = new ArrayList<>();
public double getDoubleVal() { return val; }
public List getListCelsius(){ return listCelsius; }
public List getListFahr(){ return  listFahreneit; }

public Map<String, List<Double>> getDictionary(){ return temperatureDic;       }
public void convertToDouble (EditText aux){
valString = aux.getText().toString();
val = Double.parseDouble(valString);
}
public void addToListCelsius(Object valueList){
listCelsius.add(valueList);
System.out.println("Lista de C: " + listCelsius);
}
public void addToListFahreneit(Object valueList){
listFahreneit.add(valueList);
System.out.println("Lista de F:" + listFahreneit);
}
public void addDictionary (){   
temperatureDic.put("C", getListCelsius());
temperatureDic.put("F", getListFahr());
System.out.println("Dicionário de temperaturas:" + temperatureDic);
}
}

添加温度

public class AddTemperature extends AppCompatActivity {    
EditText tempCel, tempFar, printIteration;
Button listTemp, iterations;
int numberIterations;
public TemperatureInCelsius temperatureInCelsius = new TemperatureInCelsius();
public TemperatureInFar temperatureInFar = new TemperatureInFar();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add__temperature);
tempCel = (EditText)findViewById(R.id.editText_addCelsius);
tempFar = (EditText)findViewById(R.id.editText_addFar);
printIteration = (EditText)findViewById(R.id.editText_totalIteration);
printIteration.setEnabled(false);
iterations = (Button)findViewById(R.id.button_iterations);
listTemp = (Button)findViewById(R.id.button_listTemp);
iterations.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//enviar valor(es) da(s) temperatura(s) para a classe TemperatureMain caaso tenham sido introduzidos
if (tempCel.getText().length() != 0 || tempFar.getText().length() != 0){
if (tempFar.getText().length() == 0) {
Toast.makeText(getApplicationContext(),"Added celsius temperature.",Toast.LENGTH_LONG).show();
temperatureInCelsius.setTemperature(tempCel);
numberIterations += 1;
//limpar o edit text
tempCel.getText().clear();
}
else if (tempCel.getText().length() == 0) {
Toast.makeText(getApplicationContext(),"Added Fahrenheit temperature.",Toast.LENGTH_LONG).show();
temperatureInFar.setTemperature(tempFar);
numberIterations += 1;
tempFar.getText().clear();
}
else {
Toast.makeText(getApplicationContext(), "Added temperatures.", Toast.LENGTH_LONG).show();
temperatureInCelsius.setTemperature(tempCel);
temperatureInFar.setTemperature(tempFar);
numberIterations += 2;
tempCel.getText().clear();
tempFar.getText().clear();
}
}
else
Toast.makeText(getApplicationContext(),"Please, introduce a temperature values.",Toast.LENGTH_LONG).show();
System.out.println("Iterações:" + numberIterations);
printIteration.setText(Integer.toString(numberIterations));
}
});
listTemp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent listTemp_activity = new Intent(getApplicationContext(), ListTemperature.class);
startActivity(listTemp_activity);
}
});
}
}

但这种方式不能编译。出现的错误如下

"温度在摄氏度类中的构造函数不能 应用于给定类型"。

因此,在您的代码中,您正在创建TemperatureInCelsius对象,如下所示:

public TemperatureInCelsius temperatureInCelsius = new TemperatureInCelsius(); // 4th line in AddTemperatureclass

在 Java 中,当您不定义任何构造函数时,默认构造函数会自动添加到类中(在您的情况下TemperatureInCelsius()(。但是,一旦使用参数定义构造函数,就不会自动添加默认构造函数。因此,如果需要它,则需要显式添加它,因为您已经添加了一个带有参数的构造函数public TemperatureInCelsius(Double _auxDouble, EditText _tempCel)

在代码中,您尝试使用默认构造器TemperatureInCelsius()创建对象。这实际上并不存在。所以你得到错误。

所以解决方案是:

1( 在TemperatureInCelsius类中显式定义默认构造函数。

2(或使用参数化构造函数来创建对象。

最新更新