如何使用Kotlin匿名类作为本机JavaScript函数的参数?

我为这个 ThreeJS类设置了interop层,并且该类的构造函数接受了一个用于设置属性的对象。

//PointCloudMaterial.js THREE.PointCloudMaterial = function ( parameters ) { THREE.Material.call( this ); this.color = new THREE.Color( 0xffffff ); this.map = null; this.size = 1; this.sizeAttenuation = true; this.vertexColors = THREE.NoColors; this.fog = true; this.setValues( parameters ); }; 

以下是我希望能够在Kotlin中做的事情,是否有可能以一种时尚的方式使用异常物体? 我原本是想创建一个相当于可能的周界的对象来传入,问题在于它会覆盖当前不是我想要的值。

 //Interop Layer native("THREE.PointCloudMaterial") public class PointCloudMaterial(parameters: object) { } //This doesn't compile "Type Expected" //Example usage var sizeObject = object { var size: Double = size } PointCloudMaterial(sizeObject); 

类型安全解决方案可能如下所示:

 native val <T> undefined: T = noImpl class PointCloudMaterialParameters ( val color: Int = undefined, val opacity: Double = undefined, //val map: THREE.Texture = undefined, val size: Double = undefined, //val blending: THREE.NormalBlending = undefined, val depthTest: Boolean = undefined, val depthWrite: Boolean = undefined, val vertexColors: Boolean = undefined, val fog: Boolean = undefined ) fun main(args : Array<String>) { println(PointCloudMaterialParameters(size = 2.0)) } native("THREE.PointCloudMaterial") public class PointCloudMaterial(parameters: PointCloudMaterialParameters) //Example usage PointCloudMaterial(PointCloudMaterialParameters(size = 2.0)) 

另一种更短但不安全的解决方案是:

 native("THREE.PointCloudMaterial") public class PointCloudMaterial(parameters: Any) //Example usage PointCloudMaterial(object { val size = 2.0 }) 

PS我们将在未来努力简化这种情况。