当前位置: 首页 > 知识库问答 >
问题:

内嵌套类上的Kotlin工厂

宓诚
2023-03-14
class OuterClass {

    var myData:List<MyData> = List<>() //gets populated elsewhere

    fun getItemFragment(position:Int) : Fragment() {
        return InnerClass.Factory.newInstance(position)
    }

    inner class InnerClass : Fragment() {

        companion object Factory {

            fun newInstance(position:Int) : InnerClass {
                var ic : InnerClass = InnerClass()
                var bundle:Bundle = Bundle()
                bundle.putInt("index", position)
                ic.arguments = bundle
                return ic
            }

        }

        override fun onCreateView(inflater:LayoutInflater, container: ViewGroup, savedInstanceState:Bundle): View? {
            //create and return view, omitted. Need access to myData
    }
}

编译程序突出显示“companion”,表示“修饰符companion不适用于内部类”,还突出显示InnerClass()调用,表示“表达式无法从嵌套类工厂访问”,使用“inner”关键字使类处于内部。

我如何用Java中的静态工厂方法来实现我在这里试图做的事情?

共有1个答案

柳灿
2023-03-14

您可以拥有:

class OuterClass {
    fun getItemFragment(position: Int): Fragment {
        return InnerClass.Factory.newInstance(position)
    }

    class InnerClass : Fragment() {
        companion object Factory {
            fun newInstance(position: Int): InnerClass {
                var ic: InnerClass = InnerClass()
                return ic
            }
        }
    }
}

然而,以下内容不会在Kotlin中编译:

class Parent {
    inner class Nested {
        companion object Factory { 
        }
    }
}

出于同样的原因,以下代码将不会在Java中编译:

public class Parent {
    public class Nested {
        public static boolean create(){
            return false;
        }
    }
}
    null
 类似资料:
  • Oracle留档(在下面的链接)说: 非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的。 但在下面的示例中,我创建了一个对象(内部类),它无法访问其封闭外部类的任何方法或变量。下面是代码,你能解释一下吗? http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html 使用Main方法初始化 对于对象,我无法访问其

  • 问题内容: Go支持在函数内部嵌套结构,但除了lambda之外没有嵌套函数,这是否意味着无法在函数内部定义嵌套类? 因此,类在函数内部被削弱感到有点奇怪。 有什么提示吗? 问题答案: 实际上,无论您要声明 带有 接收器还是 不 带有接收器的函数都没有关系:不允许在Go中嵌套函数。 尽管您可以使用函数文字来实现以下目的: 在这里,我们创建了一个具有函数类型的变量,并将其分配给另一个函数。调用“外部”

  • 问题内容: 我正在为新网站构建 用户类 ,但是这次我在考虑构建它有点不同… C ++ , Java 甚至 Ruby (可能还有其他编程语言)都允许在主类内部使用嵌套/内部类,这使我们可以使代码更加面向对象和组织化。 在PHP中,我想这样做: 这在PHP中可行吗?我该如何实现? 更新 如果不可能,将来的PHP版本是否会支持嵌套类? 问题答案: 介绍: 嵌套类与其他类的关系与外部类略有不同。以Java

  • 问题内容: 我必须与API进行交互,并且响应格式(根据我的阅读)似乎结构不良。我发现一个Google 网上论坛在这里回答了一个类似的问题,但是我在实现Response类来处理Gson.fromJson时遇到了麻烦。有没有我想念的例子? 问题答案: JSON对象可以由或Javabean类表示。这是一个使用Javabean的示例。 如下使用它:

  • 目标 了解如何定义嵌套类和何时适合使用它们 了解使用嵌套类的副作用 了解 new 运算符在嵌套类中的特殊用法 了解如何和何时使用静态内部类和匿名内部类 在何处使用嵌套类 顾名思义,嵌套类(或内部类) 是在一个类中定义的另一个类。 public class EnclosingClass { . . . public class NestedClass { . . . } } 像成

  • 我在Elasticsearch中获得了大量数据。我的douments有一个名为“records”的嵌套字段,它包含一个包含多个字段的对象列表。 我希望能够从记录列表中查询特定的对象,因此我在查询中使用了inner_hits字段,但是这没有帮助,因为聚合使用大小0,所以没有返回结果。 我没有成功地使一个聚集只对inner_hits有效,因为无论查询是什么,聚集都返回记录中所有对象的结果。 这是我正在