标签: synthetic

Java中的合成类

什么是Java中的合成类?为什么要使用它?我怎么用呢?

java class synthetic

138
推荐指数
6
解决办法
5万
查看次数

什么是@JvmSynthetic在Kotlin中的用途?

@JvmSynthetic在kotlin-stdlib中遇到了注释,我想知道它是什么,但不幸的是,它没有记录.

据我所知,将它应用于程序元素会将synthetic修饰符添加到相应的字节码元素.结果,该元素从Java变得不可见:

class MyClass {
    @JvmSynthetic
    fun f() { }
}
Run Code Online (Sandbox Code Playgroud)

Java代码中的某处:

MyClass c = new MyClass();
c.f() // Error: cannot resolve method f()
Run Code Online (Sandbox Code Playgroud)

但是在Kotlin代码中仍然可以看到相同的元素:

val c = MyClass()
c.f() // OK
Run Code Online (Sandbox Code Playgroud)

隐藏来自非Kotlin来源的声明是否有效使用@JvmSynthetic?它是预期用途吗?其他适当的用例是什么?

由于@JvmSynthetic隐藏了来自Java的函数,它们也无法在Java中被覆盖(当涉及abstract成员时,调用会产生AbstractMethodError).鉴于此,我可以@JvmSynthetic用来禁止在Java源代码中覆盖Kotlin类的成员吗?

java java-interop synthetic kotlin

18
推荐指数
2
解决办法
1525
查看次数

什么是Java中的合成字段?

有人可以用一种易于理解的方式解释Java中合成字段的重要性.我记得在非静态内部类的上下文中读取它,其中每个这样的内部类实例都维护对封闭类的引用.为什么这样的引用/字段称为合成字段?

java compiler-construction field inner-classes synthetic

17
推荐指数
1
解决办法
2万
查看次数

为什么'T.super.toString()'和'super :: toString'使用合成访问器方法?

考虑以下一组表达式:

class T {{
/*1*/   super.toString();      // direct
/*2*/   T.super.toString();    // synthetic
        Supplier<?> s;
/*3*/   s = super::toString;   // synthetic
/*4*/   s = T.super::toString; // synthetic
}}
Run Code Online (Sandbox Code Playgroud)

这给出了以下结果:

class T {
    T();
     0  aload_0 [this]
     1  invokespecial java.lang.Object() [8]
     4  aload_0 [this]
     5  invokespecial java.lang.Object.toString() : java.lang.String [10]
     8  pop           // ^-- direct
     9  aload_0 [this]
    10  invokestatic T.access$0(T) : java.lang.String [14]
    13  pop           // ^-- synthetic
    14  aload_0 [this]
    15  invokedynamic 0 get(T) : java.util.function.Supplier [21]
    20  astore_1 [s] …
Run Code Online (Sandbox Code Playgroud)

java super java-8 synthetic method-reference

13
推荐指数
1
解决办法
563
查看次数

为什么Java编译器会创建serialVersionUID合成字段?

作为调试应用程序的一部分,我注意到Field.getDeclaredFields()返回一些合成字段,包括serialVersionUID扩展接口的类中的字段,尽管没有扩展Serializable.

为什么编译器会添加这样的字段?

UPDATE

事实上,还有一个$VRc合成领域.

java field serialversionuid synthetic

10
推荐指数
1
解决办法
933
查看次数

从 Activity 访问 Fragment 中的视图绑定

我正在升级一个应用程序以删除所有合成内容并使用新的 ViewBinding 功能。到目前为止,只要您位于正在访问的类/布局内,一切都可以正常工作,但我在主活动中对布局元素有综合引用。

课堂片段:

    private var _binding: FragmentBinding? = null
    val binding get() = _binding!!
    private val compositeDisposable = CompositeDisposable()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        App.instance.getAppComponent().inject(this)
        _binding = FragmentBinding.inflate(inflater, container, false)
        return binding.root
    }
Run Code Online (Sandbox Code Playgroud)

在 MainActivity 中我有:

    private lateinit var mainBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(null)
        mainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(mainBinding.root)
    }
Run Code Online (Sandbox Code Playgroud)

我有一些对话框方法,它们使用合成材料来调暗片段中的布局元素。例如。

//textView on fragment layout.xml
textView?.alpha = someFloat
Run Code Online (Sandbox Code Playgroud)

这在合成时工作得很好,但是我无法根据 Android 的文档让新的视图绑定工作。如何使用 ViewBinding 轻松模仿合成行为?到目前为止,它已经增加了大量的代码,除非创建了 Fragment 的视图,否则它无法工作,并且确实使代码变得更糟,更难以理解。我尝试使用主活动布局根视图的绑定,但出现“视图必须有标签”错误,并且所有布局都以<layout>. 任何帮助表示赞赏。

android android-fragments synthetic android-activity android-viewbinding

8
推荐指数
2
解决办法
6120
查看次数

处理渐变折射率的光线追踪器?

我想找到一个利用梯度折射率的射线追踪/合成成像程序.我已经在线查看了许多光线跟踪器,但我还没有找到一个专门处理梯度指数的工具,以及常规材料.任何有关查找具有此功能的光线跟踪器的建议都将非常感谢!

gradient raytracing imaging synthetic

6
推荐指数
0
解决办法
135
查看次数

在Scala中的类字段中查找合成成员

我在scala中使用以下方法来获取类中的所有字段:

  val fields = contract.getClass.getDeclaredFields.toList.map(value => {
  value.setAccessible(true)
  value.getName
})
Run Code Online (Sandbox Code Playgroud)

contract已被定义为我的代码中的类.由于我使用反射,问题是我得到另一个元素$jacocoData作为字段之一.我想忽略这个领域."hacky"这样做的方法是知道它总是附加在列表末尾的事实,所以我可以通过改变我的函数签名来"修复"它,productArity并且只采用这样的第一个arity元素:

  def getFields(contract: Contract, arity: Int): List[String] = {
     val fields = contract.getClass.getDeclaredFields.toList.map(value => {
     value.setAccessible(true)
     value.getName
  })
 //to ignore $jacocoData (Java code coverage) field
 val firstnFields = fields.take(arity)
 firstnFields
 }
Run Code Online (Sandbox Code Playgroud)

根据这个FAQ的最后一点,我需要摆脱一个类的合成成员.我怎么做?

reflection scala jacoco synthetic

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

import kotlinx.android.synthetic 失败:Android studio 找不到它,但我可以运行该应用程序

我发现了很多关于这个主题的东西,但还不足以解决它,所以我就开始吧。

我刚刚开始一个新项目,他们遇到了一个严重的问题:

import kotlinx.android.synthetic
Run Code Online (Sandbox Code Playgroud)

Android Studio 无法解决。项目运行起来,构建过程中没有问题,但是 Android Studio 在代码中向我显示了很多错误,因为它无法识别布局。这意味着布局/组件没有快捷方式。

我认为我们已经导入了正确的插件:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'org.jetbrains.kotlin.android.extensions'
Run Code Online (Sandbox Code Playgroud)

我尝试删除 apply plugin: 'org.jetbrains.kotlin.android.extensions',但没有帮助。我们的构建脚本依赖项中还有类路径“org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version”。

不是 Gradle 专家,但欢迎寻求任何帮助!

android gradle synthetic kotlin kotlinx

3
推荐指数
1
解决办法
3536
查看次数