已知有一个类,不知道这个类有多少个类型字段,但是至少有一个字段的类型是知道的,类型是动态的。换成 java 里就是 Object,换成 c#就是 Object,Dynamic 。
为了方便称呼,把该类称为 A 类,把该字段称为 A 字段。A 类实例创建时,A 字段是 null 值。
此时有一个 B 类,B 类里有一个方法的形式参数是 A 类,称呼该方法为 B 方法。调用 B 类实例的 B 方法,传入 A 类实例,之后 A 类实例的 A 字段就有了内容,并且这个内容要么是 B 类实例里的某个字段,要么是 B 类实例与 A 类实例的其他字段内容运算产生的结果。只有这两种可能。
请问 A 类里的 A 字段叫什么名字比较好一点
1
wysnylc 2020-06-29 10:26:07 +08:00
命名问题老世纪难题了
|
2
GM 2020-06-29 10:31:03 +08:00
setA(Object value);
hahahaha |
3
cruii 2020-06-29 11:29:47 +08:00
placeholder (狗头
|
4
zsdroid 2020-06-29 11:30:01 +08:00
不管类型怎么多变,总知道这个字段的作用吧。
|
5
aguesuka 2020-06-29 12:06:37 +08:00 via Android
attachment
|
6
xiangyuecn 2020-06-29 12:15:54 +08:00
泛型啊。泛型类 或者 泛型方法 想怎么定义就怎么定义
伪代码意思意思 class B{ func b<T>(A<T> aaa,.......T val){ aaa.setVal(val); } } class A <T>{ T value func val(T val){ value=val } } B bbb=new B() A<str> a1=new A<str>() A<int> a2=new A<int>() bbb.b(a1, "abc") // a1.value="abc" bbb.b(a2, 123) // a2.vlaue=123 |
7
dallaslu 2020-06-29 13:00:46 +08:00
externalAssignmentValue
|
8
Lalavava 2020-06-29 18:48:37 +08:00
首先根据问题描述
这里问题应该不在取什么名字 而是你的这种设计本来就糟糕透顶 你在外部对一个对象实例内部字段进行初始化 试想一下如果别人看你的代码 他必须搜索所有代码 去找到你在什么地方进行了初始化 因为你可以在任何地方进行初始化 而且初始化这个字段的位置可以和 new A 的地方没任何关系 对于你描述的场景 如下代码应该是比较好的 class A<T> { public A(Supplier<T> initializer) { a = CompletableFuture.supplyAsync(initializer); } public T getA() { try { return a.get(); } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e.getCause()); } } private final CompletableFuture<T> a; } class B { public int foo() { return 0; } } public class Main { public static void main(String[] args) { var a = CompletableFuture.supplyAsync(B::new).thenAccept(b -> new A<Integer>(b::foo)); } } |
9
tctc4869 OP @Lalavava
任何设计工具都有可能找到合适它的用武之地,用不好工具,别人阅读远吗无法理解,这些现象不过程序员素质造成的。 而且真有礼貌,素质可真好啊,在说糟糕透顶之前,应该问一下,这个设计思路的最终目的是用在哪里的么?为什么要这么设计,没有可代替的更容易让人理解的方案么。在得到最终原因回答之后(但我也没有说),再说教至少是有理了 |
10
msg7086 2020-06-30 03:28:38 +08:00
b_data b_storage b_info b_result 等等。本质上还是要写清楚用途。
|
11
lijialong1313 2020-06-30 09:33:09 +08:00
我听着这像 XY 问题,建议详细描述为什么要这么做。
我想象不到为什么需要实例 B 来初始化一个实例 A 的字段值,如果需要这个字段值,可以直接使用实例 B 而并非实例 A,即使其基于 A 、B 运算结果 |