标签: project-valhalla

Valhalla项目的价值类型是什么?

我开始阅读有关瓦尔哈拉项目的内容,而且有一些我真的不明白的事情就是这样Value Types.

这就是我的理解:

1)对象是否无法将其作为参考进行比较?

final ValueType a = new ValueType();
final ValueType b = a;
System.out.println(a==b); returns false????
Run Code Online (Sandbox Code Playgroud)

Google AutoValue 代码示例中,它说明了

if(o == this){return true;}//equals method implementation what is this? I am comparing references here right?
Run Code Online (Sandbox Code Playgroud)

2)根据维基百科,高效的小"对象"没有继承.做什么Small Objects?Without inheritance意味着什么?

这是不可能使用VT?

public final class ValueType extends Any //is this not possible??
Run Code Online (Sandbox Code Playgroud)

3)为什么使用它们?将使用哪种方案以及如何使用它.

4)Google AutoValue Library简而言之,值类型对象是没有标识的对象,即如果它们各自的内部状态相等,则认为两个值对象相等.我的问题是:他们是否有州,他们应该实施equalshashcode.什么是没有身份的对象是什么意思?

5)这个断言是否正确?

public static void …
Run Code Online (Sandbox Code Playgroud)

java value-type project-valhalla

29
推荐指数
2
解决办法
5303
查看次数

Java 9或更高版本中的预计泛型专业化,与List <int>:.remove()将如何工作?

通用专业化和值类型是未来JVM的预计特征; 链接到瓦尔哈拉项目页面在这里.

现在,根据我的理解,可以宣布:

final List<int> myList = new ArrayList<>(); // for instance
Run Code Online (Sandbox Code Playgroud)

但是接着List定义了另一个.remove()方法,除了在Collection接口中定义的方法之外,它接受int一个参数,它是要删除的列表中的索引; 这就是为什么,目前,list以下示例中的内容:

final List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.remove(2);
Run Code Online (Sandbox Code Playgroud)

将是[1, 2]和不[1, 3](选择最具体的过载).

但是,如果将来我们能够声明一个List<int>,我们就会遇到一个问题:该remove方法会选择多少重载?

java generics project-valhalla

15
推荐指数
1
解决办法
531
查看次数

如果应用程序从不依赖于其对象标识,那么序列化基于值的对象是否可以?

声纳显示

使这个基于值的字段瞬态,因此它不包含在此类的序列化中.

这是一个面向未来的错误,当基于价值的类将被释放时.

那么,如果应用程序永远不依赖于它的对象标识,那么我可以使基于值的对象非瞬态吗?

serialization java-8 java-9 project-valhalla

5
推荐指数
1
解决办法
1174
查看次数

null 可以赋值给值类型变量或与值类型变量进行比较吗?

在Java中,一直存在原始类型和引用,但不存在值类型。

Valhalla 项目的目标之一是探索和孵化候选功能,例如值类型

我想知道是否null可以分配给值类型变量,或者值类型变量是否可以与null.

如果没有,我也想知道为什么。

java null value-type project-valhalla

4
推荐指数
1
解决办法
263
查看次数

如何使用默认值一般初始化值类型?

在Java的Project Valhalla的上下文中,我如何使用其默认值一般初始化值类型

最初,我认为分配null给任何值类型都会执行此初始化.但是,这个问题的答案和评论清楚地表明这null是一个参考,因此它与值类型无关(正是由于值类型不是引用,而是直接值).

例如,如果我有一个Person值类型StringValueType nameDateValueType dateOfBirth属性(这里dateOfBirth应该是一个包含嵌套的值类型int year,int month并且int day属性),我怎么能初始化我的Person值类型在一个通用的方法,这样它的属性的值是""用于name(0, 0, 0)(或相应的默认价值)dateOfBirth分别为?

为了更清楚,如果这是C,我会这样做:

memset(myPersonStructVariable, 0, sizeof(Person));
Run Code Online (Sandbox Code Playgroud)

或者在现代C:

struct Person myPersonStructVariable = {0};
Run Code Online (Sandbox Code Playgroud)

java initialization value-type project-valhalla

4
推荐指数
1
解决办法
85
查看次数