我在Oracle的网站上读到了Java的类型擦除.
什么时候发生类型擦除?在编译时还是运行时?当班级加载?当类被实例化时?
很多站点(包括上面提到的官方教程)都说在编译时会发生类型擦除.如果在编译时完全删除了类型信息,那么当调用使用泛型的方法而没有类型信息或错误的类型信息时,JDK如何检查类型兼容性?
考虑以下示例:Say class A有一个方法,empty(Box<? extends Number> b).我们编译A.java并获取类文件A.class.
public class A {
public static void empty(Box<? extends Number> b) {}
}
Run Code Online (Sandbox Code Playgroud)
public class Box<T> {}
Run Code Online (Sandbox Code Playgroud)
现在我们创建另一个类B,该类empty使用非参数化参数(原始类型)调用该方法:empty(new Box()).如果我们编译B.java与A.class在类路径中,javac的是足够聪明,引发警告.所以A.class 有一些类型信息存储在其中.
public class B {
public static void invoke() {
// java: unchecked method invocation:
// method empty in class A is applied to given types
// required: Box<? extends java.lang.Number>
// found: …Run Code Online (Sandbox Code Playgroud) 我已经创建了CRUD方法,但我遇到了一些问题.
这是我的添加方法代码:
public Product addProduct(Product content) {
Product item = new Product();
item.setName(content.getName());
item.setCalories(content.getCalories());
item.setFat(content.getFat());
item.setCarbo(content.getCarbo());
item.setProtein(content.getProtein());
item.setProductKinds(content.getProductKinds());
item.setAuthor(content.getAuthor());
item.setMedia(content.getMedia());
item.setApproved(content.getApproved());
databaseController.saveTest(item);
logger.log("Item created");
return item;
}
Run Code Online (Sandbox Code Playgroud)
这是我的editProduct方法:
public Product editProduct(Product product) {
Product databaseProduct = databaseController.get(Product.class, product.getId());
databaseProduct.setAllProducts(product);
databaseController.save(databaseProduct);
return databaseProduct;
}
Run Code Online (Sandbox Code Playgroud)
在模型课中,我认为我已经做好了一切:
package pl.javamill.model.kitchen;
import com.amazonaws.services.dynamodbv2.datamodeling.*;
import pl.javamill.model.Request;
import pl.javamill.model.common.Author;
import pl.javamill.model.common.AuthorConverter;
import pl.javamill.model.common.Media;
import pl.javamill.model.common.MediaConverter;
import java.util.List;
@DynamoDBTable(tableName = "product")
public class Product extends Request {
/**
* Id of kitchen content
*/
private String id;
/** …Run Code Online (Sandbox Code Playgroud) 我正在尝试为以下情况创建一个 dynamoDBMapper 注释。
我有 EmployeeLevelTrail,它是一个员工级别记录的类
@DynamoDBTable(tableName = TABLE_NAME)
public class EmployeeData {
public final static String TABLE_NAME = “EmployeeDataRecord”;
@DynamoDBAttribute(attributeName = “employeeID”)
public String EmployeeID;
@DynamoDBAttribute(attributeName = “EmployeeLevelDataRecords”)
@DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.M)
public EmployeeLevelTrail employeeLevelTrail
}
public class EmployeeLevelTrail {
public final static String DDB_ATTR_EMPLOYEE_LEVEL_TRAIL = “employeeLevelTrail”;
@DynamoDBAttribute(attributeName = DDB_ATTR_EMPLOYEE_LEVEL_TRAIL)
private List<EmployeeLevelRecord> thisEmployeeLevelRecords;
public void appendEmployeeLevelRecord(@NonNull EmployeeLevelRecord employeeLevelRecord) {
thisEmployeeLevelRecords.add(employeeLevelRecord);
}
}
public class EmployeeLevelRecord {
private String Level;
private String Manager;
private Instant timeOfEvent;
}
Run Code Online (Sandbox Code Playgroud)
这是我的注释,但它不正确,因为我无法保存我的 DynamoDB 数据
annotations amazon-web-services amazon-dynamodb aws-sdk dynamodb-queries