嘿,我刚刚开始学习Java课程,我将很快开始学习(是的,我是一个书呆子,我在开始上课前学习).我想把几个概念放在一起,以了解一切如何在Java中协同工作.
现在,我想要尝试做的是一个简单的Shape(Forme in french)类,它至少有1-2个类继承自它,并在集合对象中创建一些实例.我也想让那些类泛型也尝试一下.那是我遇到麻烦的部分.
我已经习惯了C++,所以这可能是混乱的地方,但似乎我不能使用泛型,所以,例如,我可以指定尺寸将在,例如,Integer或Double或Float或其他.可能吗 ?
由于base和,下面的GetArea()方法无法编译hauteur.
package testconcepts;
import java.util.*;
import java.lang.*;
abstract class Forme <T extends Number> {
protected String nom_forme;
String NomForme() { return nom_forme; }
abstract Double GetArea();
}
class Triangle <T extends Number> extends Forme {
protected T base, hauteur;
Triangle() {
this.nom_forme = "TRIANGLE";
}
@Override
Double GetArea() { return base * hauteur / 2; }
T GetBase() { return base; }
T GetHauteur() { return hauteur; }
void SetBase(T base) { this.base = base; }
void SetHauteur(T hauteur) { this.hauteur = hauteur; }
}
public class TestConceptsJava {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Triangle<Double>());
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,由于类型问题,我也无法在构造函数中将赋值赋值为0.
此外,我知道有非常相似的主题,但我还没有找到解决我的问题的其他问题.
TLDR如何使用基本类型包装器(Double,Integer ..)创建工作泛型?
所以你的问题就在这一行我猜:
Double GetArea() { return base * hauteur / 2; }
Run Code Online (Sandbox Code Playgroud)
收到错误的原因是因为*对于类型的对象未定义运算符Number.既然你知道你将处理ints和doubles(我假设),你可以试试这个:
Double GetArea() { return base.doubleValue() * hauteur.doubleValue() / 2; }
Run Code Online (Sandbox Code Playgroud)
作为注释,通常我们使用小写字母开始方法名称,即getArea().