嗨,我是Java泛型的新手,我正在尝试访问泛型类中的属性。到目前为止,我已经找到了C#相关的答案,如果有人能指导我如何在java中做到这一点,那将是非常有帮助的。假设我有Class Car,它有整数型轮子和字符串型模型的属性。现在我有一个方法,比如车辆助手(列表
List<Car> cars = new ArrayList<>();
cars.add(new Car(4, "Honda"));
vehiclehelper(cars);
现在来看VehiclePermethod,在它的主体中,我想循环一下
列表
for(T vehicle: vehicles)
count+ = vehicle.getWheels();
现在在这里,我得到了一个错误,说属性没有定义。如何从泛型类型列表中获取wheel属性?
你的车不是通用的。这是普通课。您只需通过通用列表集合操作汽车对象。如果字段是私有的,那么通过getter或setter访问Car字段不应该有任何问题。下面的代码非常有效。
public class App {
public static void main(String[] args) {
List<Car> carList = new ArrayList<>();
carList.add(new Car(4, "Honda"));
carList.add(new Car(3, "Polaris Slingshot"));
System.out.println(carHelper(carList)); // the result is 7
}
static int carHelper(List<Car> cars) {
int count = 0;
for (Car car : cars) {
count += car.getWheel();
}
return count;
}
}
class Car {
private int wheels;
private String name;
public Car(int wheels, String name) {
this.wheels = wheels;
this.name = name;
}
public int getWheels() {
return wheels;
}
public void setWheels(int wheels) {
this.wheels = wheels;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
如果你想对任何对象类型使用通用方法carHelper,那么你必须使它泛化:
static <T> int carHelper(List<T> elements) {
int count = 0;
for (T element : elements) {
count += element.getWheel();
}
return count;
}
但在这种情况下,在元素处会出现编译时错误。getWheel()因为T类型是未知类型。编译器不知道他的方法。为了找到一些通用的解决方案,我们必须定义方法参数的边界。假设输入参数为车辆或其子系统。比如说,在Vehicle类中,我们将引入所需字段,他的后代将继承这些字段。在下面列出的情况下,该方法将起作用。阅读泛型中的通配符。
static int carHelper(List<? extends Car> elements) {
int count = 0;
for (Car element : elements) {
count += element.getWheels();
}
return count;
}
当我使用Jackson ectivtMapper将有效负载序列化为字符串值时,我很难获取要维护的泛型属性的类型信息。 我想要达到的结果如下。 我实际得到的结果如下(注意TestClassA缺少@type信息)。 我使用的测试是: “test JSON编组”测试中有两个版本。注释掉的版本和未注释的版本都会产生完全相同的结果。 第二个测试验证TestClassA本身是否生成了正确的类型信息。 只有当包
问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符
如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个
如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或
当我创建一个带有父对象引用的子对象时,比如
npm包允许我们在TypeScript应用程序中使用反应。我们将组件定义为 在这里,我们必须声明组件道具和状态的类型(在类型变量中)。 在我们声明了这些类型之后,TypeScript使用这些类型来验证组件的使用(传递给它的道具的形状)。 我想围绕这样一个组件创建一个容器。容器将重用组件的道具。但是为了用相同的道具创建另一个组件,我必须重新声明道具的类型。或者从原始零部件文件中导出它们并导入到容器中