我有这个实用程序接口由 RecyclerView 的 ViewHolder 来实现,它会触发 UI 事件。
interface ObservableMvpViewHolder<V> {
val listeners: List<V>
fun registerListener(listener:V)
fun unregisterListener (listener: V)
}
Run Code Online (Sandbox Code Playgroud)
该listeners属性就像一份合同,因此我希望客户有义务声明它以存储观察者。
但是当我实现这个接口时,我必须声明这个属性的 getter:
class AddItemViewHolderHolder(override val containerView: View) : ViewHolder(containerView), LayoutContainer, ObservableMvpViewHolder<AddItemViewHolderHolder.Listener> {
override val listeners: List<Listener>
get() = listeners
Run Code Online (Sandbox Code Playgroud)
我不想这样做是为了避免将此属性暴露给外部。
我是 Kotlin 新手,有没有一种方法可以做到这一点而无需声明抽象类?
android interface kotlin android-recyclerview readonly-variable
我正在开发一个新的应用程序,Asp.Net MVC project这次是为了更好地控制应用程序的静态内容,我计划将所有内容作为可重用属性存储在readonly static variables. 这些值在应用程序的整个生命周期中不会改变。
使用示例:
我创建了一个类,将所有消息保存在静态变量中,这样如果我想更改默认保存消息,我可以从这里更改它,而无需更改项目中的每个事件。这还包括验证消息。(数量可能会快速增长,具体取决于项目的规模)
其他用途:存储所有与应用程序相关的属性,例如版本、标题、密钥等等。我还计划存储按钮文本和其他 UI 控件相关的属性,以便可以轻松自定义它们,例如我不知道可能是 CSS 类。
更不用说,除了上述之外,我还有许多静态类,例如数据访问助手和带有一些静态方法的实用函数。
示例类:
public static class Messages
{
public static class Response
{
public readonly static string SUCCESS = "Process completed successfully";
public readonly static string FAILED = "Process failed";
public readonly static string ERROR = "Some error occured";
public readonly static string OPRNOTPERFORMED = "Operation aborted/failed for some unknown reason. Please contact your administrator";
//LOGIN
public readonly static string USERNOTFOUND = "Invalid username …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc web-applications static-variables readonly-variable
我的搜索在这个问题上变成了空白......有很多关于如何const通过发出变量的只读访问信号来帮助编译器优化的讨论,但我无法找到问题的答案标题。我对这个问题很感兴趣,因为const如果编译器可以这样做,我想避免考虑使用优化。
我很欣赏即使编译器能够找到不变的值并将它们优化为只读访问,在某些情况下,使用const仍然会有所帮助。我只是在广泛地寻找有关编译器功能的答案 - GCC 优化器是否在不使用 的情况下寻找不变的值const?
描述
我正在做一个 LuaJ 程序,这是一个像这样的 lib 脚本:
function foo()
print("foo");
end
Run Code Online (Sandbox Code Playgroud)
我希望该函数可以直接foo在其他脚本中调用(否),但在不同脚本中执行不可变。(即使一个脚本覆盖它,它也会像其他脚本中的原始方式一样执行。)require
例如,这是脚本 1:
foo = function()
print("bar");
end
Run Code Online (Sandbox Code Playgroud)
这是脚本 2:
foo();
Run Code Online (Sandbox Code Playgroud)
做了什么
我看到了这两个问题。它们确实有效,但不是解决这个问题的方法。
我尝试在每次 exec 脚本或 set 时加载 lib local _ENV,但由于可能会有从 Java 到 Lua 的进一步回调,因此它无法正常工作。
Globals我现在通过每次在 Java 中加载脚本时创建一个并加载 lib 脚本来处理它,如下所示:
public static void main(String[] args) {
loadAndCallViaDifferentEnv(libPath, script1);
loadAndCallViaDifferentEnv(libPath, script2);
}
static void loadAndCallViaDifferentEnv(String libPath, String scriptPath) {
Globals globals = JsePlatform.standardGlobals();
globals.loadfile(libPath).call();
globals.loadfile(scriptPath).call();
}
Run Code Online (Sandbox Code Playgroud)
效果很好,但成本很高。有没有更好的办法?
我的一个类有一个相当大的静态构造函数,并且想要重构它以将初始化的各个部分封装在静态函数中。
One of the things this static constructor does a lot of is initialize the values of static readonly fields. However, when I try to move these parts into functions, obviously the compiler wont let me as these can only be set in the static constructor. This makes sense as it doesn't know that I only intend to call these functions from my static constructor.
Is there any way around this? e.g. is there some sort of attribute I can …
看起来类似这样写:
use Const::Fast;
const $xx, 77;
sub test {
do_something_with( $xx );
}
Run Code Online (Sandbox Code Playgroud)
或者
sub test {
state $xx = 77;
do_something_with( $xx );
}
Run Code Online (Sandbox Code Playgroud)
实现此目的的更好方法是什么:viaconst或via state?
sub get_ip_country {
my ($ip_address) = @_;
my $ip_cc_database = GeoIP2::Database::Reader->new(file => '/etc/project/GeoLite2-Country.mmdb');
...
}
Run Code Online (Sandbox Code Playgroud)
UPD
在这个子我没有更改指向geoip数据库的指针,所以它应该是const。但我不想每次调用 sub 时都重新创建对象(这很慢)。所以我想尽管指针没有改变,但使用起来会更快state。
看来应该是const state $ip_cc_database